我正在尝试从一个私人论坛中提取一些数据。我创建了一个PHP脚本,它使用CURL登录,使用DOMDocument提取页面数据。
我已经成功地使用脚本登录了,但是当我尝试使用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. 发布于 2010-11-23 11:58:44
我相信你每次都要使用curl来获取你的html页面,你第一次登录时使用curl,这会将cookie保存到它的cookie jar中。这样,下次您使用curl (使用相同的cookie jar)时,它将发布cookie数据,服务器就会知道您已登录。切换到使用domdocument,我不相信会使用curl的cookie jar来表明您已登录。
您需要使用curl来获取html,然后您可以将html传递给domdocument并对其进行解析。
https://stackoverflow.com/questions/4252626
复制相似问题