2010-11-23 115 views
0

我想從私人論壇中提取一些數據。我創建了一個使用CURL登錄的PHP腳本,並使用DOMDocument來提取頁面數據。PHP Curl登錄論壇,但不會保持登錄狀態?

我已成功使用腳本登錄,但它的行爲就像我嘗試使用loadHTMLFile()加載網頁時從未登錄一樣。

有人告訴我可能需要發送cookie標頭嗎?但我不知道該怎麼做,或者甚至有必要。

任何人有任何想法?

<? 
function vBulletinLogin($user, $pass) 
{ 
     $md5Pass = md5($pass); 
     $data = "do=login&url=index.php&vb_login_md5password=$md5Pass&vb_login_username=$user&cookieuser=1"; 
     $ch = curl_init(); 

     curl_setopt ($ch, CURLOPT_URL, "****"); // replace ** with tt 
     curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
     curl_setopt ($ch, CURLOPT_TIMEOUT, '10'); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch,CURLOPT_POSTFIELDS,$data); 
     curl_setopt($ch, CURLOPT_COOKIEJAR, "/public_html/phpcrawl/cookies.txt"); 
     curl_setopt($ch, CURLOPT_COOKIEFILE, "/public_html/phpcrawl/cookies.txt"); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_REFERRER, "****"); 
     $store = curl_exec ($ch); 
     echo $store; <- **this shows that I have successully logged in, it gives me a welcome message** 
     print_r($_COOKIE); 

     curl_close($ch); 

     $pos = strpos($store, "Thank you for logging in"); 
     if($pos === FALSE) RETURN 0; 
     else RETURN 1; 

} 
if(vBulletinLogin("****","****")) echo "Logged In"; 
else echo "Failed to Login check User/Pass"; 

$url="http://texturl.com"; 
echo $url."<br>"; 

//get new HTML document 
$html = new DOMDocument(); 

$html->loadHTMLFile($url); 
print $html->saveHTML(); <- shows a login and password box saying I am not logged in. 

回答

1

我相信你必須每次使用後捲曲獲取你的HTML網頁,使用捲曲在第一時間登錄,節省了cookie中被登錄,到它的餅乾罐。因此,下一次使用curl(使用相同的cookie jar)時,它會發布cookie數據,並且服務器知道您已經登錄。切換使用domdocument我不相信要使用curl的cookie jar來說你是登錄。

您需要使用curl來獲取html,然後您可以將html傳遞給domdocument並解析它。

+0

非常感謝您的幫助。得到它的工作。 – 2010-11-23 04:37:50