9

我正在使用 multi 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 禁止响应。

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

4

5 回答 5

15

只需尝试为用户代理添加两行,看看它是否有效。有些服务器不接受来自脚本的请求,这取决于用户代理。

// 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]);
}
于 2012-05-24T13:08:56.390 回答
2

联系运行您尝试连接的站点的任何人,并询问他们为什么禁止您的请求。

然后,您可以停止(如果您所做的只是他们认为不可接受)或更改请求以使其符合他们的规则。

于 2012-05-24T13:09:54.550 回答
1

尝试设置 Referer 和 User-Agent 标头,但是!

... 将 CURLOPT_SSL_VERIFYPEER 设置为 false 是危险的,绝不应该在生产中进行。至少将该行包含在某种 is_dev 检查中。

您这样做是在破坏 SSL 的目的,允许攻击者拦截您的请求并返回他们喜欢的内容,而无需验证他们的 SSL 证书。

于 2016-07-17T20:08:01.273 回答
0

桑杰的回答可能总是有帮助。但是当客户端IP被服务器端阻塞时,在客户端执行curl也会出现这个错误。

于 2017-05-31T03:50:49.767 回答
0

我通过删除以下行来解决问题

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
于 2020-12-18T18:53:46.753 回答