我第一次使用cURL。我需要登录一个网站。 我有设置cookie文件和回溯的问题,所以我可以访问该页面不只是一次,而是几次。 我在网上找到了代码,用于登录网站和Scrap页面获取一些详细信息,导致获取该页面需要很长时间。 所以我只想知道它是否正常!代码belove(它只是用于在Scraping中未登录的代码中登录)
<?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 :(得分:2)
您需要检查是否要发布所有“发布字段”.. 某些站点使用安全令牌或会话ID来防止僵尸程序登录其站点。 无论如何,您需要安装Live HTTP标头firefox扩展。打开它并尝试手动登录,然后查看当您按下登录按钮时实际发布的内容。 获得价值后。然后添加到第一个函数并再次测试。
答案 1 :(得分:1)
首先使用$strPostFields
存储登录名和密码,然后使用
$this->m_strResourceCurl = curl_init();
并在您的cURL脚本中添加此
curl_setopt( $this->m_strResourceCurl, CURLOPT_POSTFIELDS, $strPostFields );
我希望你能得到这个小代码片段。
答案 2 :(得分:0)
为什么不在
添加网址参数$login = curl_init($url);