2010-11-23 15 views
0

プライベートフォーラムからデータを抽出しようとしています。私はCURLを使ってログインするPHPスクリプトを作成し、DOMDocumentを使用してページデータを抽出しました。PHP Curlはフォーラムにログインしますが、ログインしていませんか?

私はスクリプトで正常にログインしましたが、loadHTMLFile()を使用してWebページをロードしようとするとすぐにログインしなかったかのように動作します。

誰かが私に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ページをフェッチした後にそのクッキージャーに、ログインしているためにクッキーを保存する、ログインするたびに、カール、あなたが初めてカール使用を使用することを持っていると信じています。次にcurl(同じcookie jarを使用)を使用すると、cookieデータがポストされ、サーバーはログインしていることを認識します。domdocumentを使用するように切り替えるcurlのcookie jarを使用して、ログインしてください。

あなたはhtmlを取得するためにcurlを使用する必要があります。次に、htmlをdomdocumentに渡して解析する必要があります。

+0

ありがとうございました。それは働いた。 –

関連する問題