我使用多卷曲从远程站点获取数据。我的脚本就像
foreach ($urls as $i => $url) {
$ch[$i] = curl_init($url['url']);
curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_multi_add_handle($multiCurlHandler, $ch[$i]);
}
它让我回复403禁止回应。
提前感谢您的建议和意见。
答案 0 :(得分:10)
尝试为用户代理添加两行,然后查看它是否有效。 有些服务器不接受来自脚本的请求,它取决于用户代理。
// line 1
$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
foreach ($urls as $i => $url) {
$ch[$i] = curl_init($url['url']);
curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0);
// line 2
curl_setopt($ch[$i], CURLOPT_USERAGENT, $agent);
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_multi_add_handle($multiCurlHandler, $ch[$i]);
}
答案 1 :(得分:2)
联系任何人运行您尝试连接的网站,并询问他们为何禁止您的请求。
然后您可以停止(如果您正在做的事情被他们认为是不可接受的)或更改请求以使其符合他们的规则。
答案 2 :(得分:0)
尝试设置Referer和User-Agent标头,但是!
...将CURLOPT_SSL_VERIFYPEER设置为false是危险的,永远不应该在生产中完成。至少在某种is_dev检查中包裹该行。
您正在通过这样做来破坏SSL的目的,允许攻击者拦截您的请求并返回他们喜欢的内容,而无需验证他们的SSL证书。
答案 3 :(得分:0)
Sanjay的answer可能会一直有所帮助。但是当客户端IP被服务器端阻止时,在客户端执行curl也会出现此错误。
答案 4 :(得分:0)
我通过删除下面的行
来解决问题curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );