相关疑难解决方法(0)

错误的请求.通过主机和系统上的curl连接到站点

cURL在php中有这个代码.

curl_setopt($ch, CURLOPT_URL, trim("http://stackoverflow.com/questions/tagged/java")); 
curl_setopt($ch, CURLOPT_PORT, 80); //ignore explicit setting of port 80
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_HTTPHEADER, $v);
curl_setopt($ch, CURLOPT_VERBOSE, true);
Run Code Online (Sandbox Code Playgroud)

内容HTTPHEADER是;

Proxy-Connection: Close
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __qca=blabla
Connection: Close
Run Code Online (Sandbox Code Playgroud)

它们中的每一个都是数组中的单个项目$v.

当我在主机上传文件并运行代码时,我得到的是:

400错误请求

你的浏览器发送了一个无效的请求.

但是当我使用命令行PHP在我的系统上运行它时,我得到的是

< HTTP/1.1 200 OK
< Vary: Accept-Encoding
< Cache-Control: private
< Content-Type: text/html; charset=utf-8 …
Run Code Online (Sandbox Code Playgroud)

php curl header

4
推荐指数
1
解决办法
1万
查看次数

如果未设置超时,为什么cURL连接失败(没有错误)?

我有一个PHP脚本,该脚本通过cURL连接到URL,然后根据返回的HTTP状态代码执行某些操作:

$ch = curl_init();
$options = array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_URL            => $url,
            CURLOPT_USERAGENT      => "What?!?"
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
$code = curl_getinfo($ch)["http_code"];
curl_close($ch);

if ($code == "200") {
    echo "200";
} else {
   echo "not 200";
}
Run Code Online (Sandbox Code Playgroud)

某些Web服务器的回复速度很慢,尽管在我的脚本尝试连接到该服务器几秒钟后,网页已加载到我的浏览器中时,它告诉我它没有收到肯定的答复(“ 200”)。因此,显然,cURL发起的连接超时。

但为什么?我没有在脚本中设置超时,并且根据该站点上其他答案,cURL的默认超时时间肯定比页面在浏览器中加载所需的三到四秒长。

那么,为什么连接超时了?如果显然已经将其设置为无限,我又如何才能使其持续更长的时间呢?


笔记:

  • 相同的URL并不总是超时。因此,有时cURL 可以连接。
  • 有时不是一个特定的URL超时,而是在不同的时间使用不同的URL。
  • 我在共享服务器上,因此我无权访问任何文件。
  • 我尝试查看curl_getinfo($ch)curl_error($ch)按照注释中的@ drew010的建议进行操作,但是无论何时发生问题,两者都为空。
  • 整个脚本运行一分钟多一点。此时,它成功连接到300多个URL。即使其中一个URL失败,其他连接也会成功建立。因此脚本不会超时。
  • cURL也不超时,因为当我尝试使用睡眠59秒钟的脚本连接到URL时,cURL成功连接。因此,显然,失败的URL的速度慢本身并不是cURL的问题。

更新资料

遵循@Karlos的建议,我使用了:

CURLOPT_VERBOSE        => 1,
CURLOPT_STDERR         => $curl_log
Run Code Online (Sandbox Code Playgroud)

(使用此答案中的代码),并在$curl_logURL失败(URL和IP更改)时找到以下内容:

* …
Run Code Online (Sandbox Code Playgroud)

php curl timeout

4
推荐指数
1
解决办法
6938
查看次数

标签 统计

curl ×2

php ×2

header ×1

timeout ×1