2010-04-14 13 views
3

처음으로 cURL을 사용하고 있습니다. 사이트에 로그인해야합니다. 쿠키 파일 설정 및 검색에 문제가있어서 한 번만이 아니라 여러 번 액세스 할 수 있습니다. 사이트에 로그인하고 일부 세부 정보 페이지를 스크랩하여 많은 시간이 소요되는 페이지를 가져 오는 원인으로 웹에서 코드를 발견했습니다. 그래서 나는 그것이 단지 괜찮은지 알고 싶다! 당신이 게시하는 경우 코드 BELOVE (그것의 준비가되어 있지 긁어에 대한 코드에 바로 로그인을위한)웹 사이트에 로그인 cURL

<?php 

curl_login('http://mywantedsite.com/login.php','user=******&pass=******','','off'); 

echo curl_grab_page('http://mywantedsite.com/somepage.php','','off'); 

function curl_login($url,$data,$proxy,$proxystatus){ 
    $fp = fopen("cookie.txt", "w"); 
    fclose($fp); 
    $login = curl_init(); 
    curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt"); 
    curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt"); 
    curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
    curl_setopt($login, CURLOPT_TIMEOUT, 40); 
    curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE); 
    if ($proxystatus == 'on') { 
     curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE); 
     curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE); 
     curl_setopt($login, CURLOPT_PROXY, $proxy); 
    } 
    curl_setopt($login, CURLOPT_URL, $url); 
    curl_setopt($login, CURLOPT_HEADER, TRUE); 
    curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($login, CURLOPT_POST, TRUE); 
    curl_setopt($login, CURLOPT_POSTFIELDS, $data); 
    ob_start();  // prevent any output 
    return curl_exec ($login); // execute the curl command 
    ob_end_clean(); // stop preventing output 
    curl_close ($login); 
    unset($login);  
}     

function curl_grab_page($site,$proxy,$proxystatus){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    if ($proxystatus == 'on') { 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
     curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); 
     curl_setopt($ch, CURLOPT_PROXY, $proxy); 
    } 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 
    curl_setopt($ch, CURLOPT_URL, $site); 
    ob_start();  // prevent any output 
    return curl_exec ($ch); // execute the curl command 
    ob_end_clean(); // stop preventing output 
    curl_close ($ch); 
} 
?> 

답변

0

왜 당신은 당신이 확인해야

$login = curl_init($url); 
+0

'CURLOPT_URL'은 괜찮습니다. 그러나 ob을 사용하지 말고, 출력 자체를 반환하고'$ output = curl_exec ($ login); –

2

에서 URL 매개 변수를 추가하지 마십시오 모든 "게시 필드".. 일부 사이트는 봇이 사이트에 로그온하지 못하도록 보안 토큰이나 세션 ID를 사용합니다. 어쨌든 , 라이브 HTTP 헤더 firefox 확장을 설치해야합니다. 그것을 열어 수동으로 로그인을 시도한 다음 로그인 버튼을 누를 때 실제로 게시되는 것을 확인하십시오. 값을 얻은 후 . 첫 번째 기능에 추가하고 다시 테스트하십시오.

1

첫째로 나는 당신이이 작은 코드를 얻을 희망이

curl_setopt($this->m_strResourceCurl, CURLOPT_POSTFIELDS, $strPostFields); 

를 추가

$this->m_strResourceCurl = curl_init(); 

를 사용하고 컬 스크립트에서, 이름 및 암호 로그인을 저장하는 $strPostFields를 사용합니다.

관련 문제