如何处理CURL 403禁止错误?任何解决方案

时间:2012-05-24 13:06:46

标签: php curl

我使用多卷曲从远程站点获取数据。我的脚本就像

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禁止回应。

提前感谢您的建议和意见。

5 个答案:

答案 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 );