当我将cURL与代理一起使用时,我只能从网站上获取。没有代理的cURL和file_get_contents()
什么都不返回(cURL HTTP代码“0”和curl_error()
Empty reply from server
)。我可以在没有代理的情况下获取其他网站。
除了被阻止之外,还有其他任何可能的解释,为什么我只能通过代理访问此网站?
答案 0 :(得分:3)
您是否在cURL中设置了用户代理?如果您的用户代理未设置或您的HTTP请求看起来可疑,网站有时会阻止您。
在PHP中设置您的用户代理:
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
答案 1 :(得分:3)
这是来自你的工作场所还是什么?许多公司在共享PHP安装上禁用file_get_contents()
,因为它非常危险。
该网站可能有用户代理检测。你可以在你的卷曲电话中假装,但我认为file_get_contents()
不可能。网站使用的另一种方法是仅在设置cookie后才显示内容,以便网站管理员永远不会看到数据。
试试这个:
function curl_scrape($url,$data,$proxy,$proxystatus)
{
$fp = fopen("cookie.txt", "w");
fclose($fp);
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
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_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
ob_start(); // prevent any output
return curl_exec ($ch); // execute the curl command
ob_end_clean(); // stop preventing output
curl_close ($ch);
unset($ch);
}
答案 2 :(得分:1)
我猜我真的被封锁了。现在使用代理,它工作正常。