2013-12-17 3 views
0

사이트에 로그인 한 다음 페이지 중 하나에 가서 데이터를 검색하려고합니다. 승인 문제가 있습니다. 샘플 코드 : 내가 메인 페이지 (안 하위)로 리디렉션하고이 쿼리의 결과로PHP 및 CURL을 사용하여 로그인 및 다운로드

$loginUrl = 'https://strona.pl/authorization'; //action from the login form 
$loginFields = array('username'=>'[email protected]', 'password'=>'haslo'); //login form field names and values 
$remotePageUrl = 'https://strona.pl/pdstrona'; //url of the page you want to save 

$login = getUrl($loginUrl, 'post', $loginFields); //login to the site 

$remotePage = getUrl($remotePageUrl); //get the remote page 

function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); 
    $buffer = curl_exec($ch); 
     //jeżeli pojawił się błąd to go wyświetlimy 
     if(curl_exec($ch) === false) 
     { 
    echo 'Curl error: ' . curl_error($ch); 
     } 
    curl_close($ch); 
    return $buffer; 
     print $status; 
} 
// wyłącza pokazywanie błędów dla funkcji loadHTML 
libxml_use_internal_errors(true); 
$dom = new DOMDocument; 
$dom ->strictErrorChecking = FALSE; 
$dom->loadHTML($remotePage); 
$xpath = new DOMXpath($dom); 

. 중요한 것은 인코딩 된 형태로 스크립트에 전자 메일 주소를 입력하는 것입니다. 예 : 이메일 %의 40mojmail.pl

편집

좋아 - 나는 몇 가지 정보를 추가합니다. 저는 출판사이고 afilo.pl로 일하고 있습니다. 일일 요금 확인은 매우 힘들 기 때문에 하루에 한 번씩 데이터를 수집하고 변경 사항을 알려주는 스크립트를 준비하고 싶습니다.

데이터를 가져올 수 없습니다. 브라우저의 샘플 쿠키 : 설정 쿠키 : PHPSESSID = jat102p33s0pmfairri1qiih24; 만료 = 2011 년 12 월 25 일 오후 9시 16 분 40 초 GMT; 경로 = /; 도메인 =. Afilo.pl

코드를 수정했지만 여전히 작동하지 않습니다.

loginUrl = 'https://opentrack.afilo.pl/logowanie'; //action from the login form 
$loginFields = array('loginemail'=>'.......','loginhaslo'=>'........'); 
//login form field names and values 
$remotePageUrl = 'https://opentrack.afilo.pl/partner/programy-lista'; //url of the page you want to save 



$login = getUrl($loginUrl, 'post', $loginFields); //login to the site 

$remotePage = getUrl($remotePageUrl); //get the remote page 

function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 

    session_start(); 
    $strCookie = session_name() . '=' . $_COOKIE[ session_name() ] . '; path=/;  domain=.afilo.pl'; 
    session_write_close(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    //curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); 
    //curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIE, $strCookie); 
    $buffer = curl_exec($ch); 
    //je¿eli pojawi³ siê b³¹d to go wyœwietlimy 
    if(curl_exec($ch) === false) 
     { 
    echo 'Curl error: ' . curl_error($ch); 
     } 
    curl_close($ch); 
    return $buffer; 
    print $status; 
} 
+2

사이트가 프로그래밍 방식으로 데이터에 액세스하기를 원한다면 API –

+0

을 제공 할 것입니다. :) 제목에 실수를했습니다. 단순히 로그인하여 하위로 이동 한 다음 데이터를 다운로드하려고합니다. 페이지가 API를 제공하지 않습니다. 메일 주소를 로그인으로 사용하는 페이지에서 코드가 작동하지 않는 것으로 나타났습니다. – user3112825

답변

0

이것은 내 질문에 대한 답변입니다. 이 코드는 잘 작동합니다.

// options 
$EMAIL   = 'login'; 
$PASSWORD   = 'haslo'; 
$cookie_file_path = "/cookies/cookies.txt"; 
$LOGINURL   = "https://domainname.com/auth"; 
$agent   = "Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)"; 


$ch = curl_init(); 

$headers[] = "Accept: */*"; 
$headers[] = "Connection: Keep-Alive"; 


curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 


curl_setopt($ch, CURLOPT_URL, $LOGINURL); 


$fields = array(); 
$fields['loginemail'] = $EMAIL; 
$fields['loginhaslo'] = $PASSWORD; 


$POSTFIELDS = http_build_query($fields); 

curl_setopt($ch, CURLOPT_URL, $LOGINURL); 

curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); 

$result = curl_exec($ch); 


$remotePageUrl = 'https://domainname.com/partner/programy-lista'; 
curl_setopt($ch, CURLOPT_URL, $remotePageUrl); 
$result = curl_exec($ch); 
관련 문제