卷曲超时小于1000ms总是失败?

发布于 2024-12-13 15:08:06 字数 980 浏览 0 评论 0原文

此代码始终失败(即 $result 是布尔值 false):

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $path);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     $curl_version = curl_version();

     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 999);

     $result = curl_exec($ch);
     curl_close($ch);

此代码始终成功(即 $result 是包含标头的字符串):

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $path);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     $curl_version = curl_version();

     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);

     $result = curl_exec($ch);
     curl_close($ch);

唯一的区别是我将超时从 999 毫秒更改为 1000 毫秒。

这肯定是curl 中的一个错误,或者是我错过的连接超时文档中的某种最小值。是哪一个?我的钱花在后者上。

This code always fails (i.e., $result is Boolean false):

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $path);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     $curl_version = curl_version();

     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 999);

     $result = curl_exec($ch);
     curl_close($ch);

This code always succeeds (i.e., $result is a string containing the header):

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $path);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     $curl_version = curl_version();

     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);

     $result = curl_exec($ch);
     curl_close($ch);

The only difference is that I've changed the timeout from 999ms to 1000ms.

This must be either a bug in curl or some sort of minimum in the documentation for connection timeouts that I missed. Which is it? My money is on the latter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

静若繁花 2024-12-20 15:08:06

来自: http://www.php.net/manual/en/function .curl-setopt.php

尝试连接时等待的毫秒数。使用 0 无限期等待。 如果 libcurl 构建为使用标准系统名称解析器,则连接的该部分仍将使用整秒分辨率进行超时允许的最小超时为一秒。< /p>

from: http://www.php.net/manual/en/function.curl-setopt.php

The number of milliseconds to wait while trying to connect. Use 0 to wait indefinitely. If libcurl is built to use the standard system name resolver, that portion of the connect will still use full-second resolution for timeouts with a minimum timeout allowed of one second.

柏拉图鍀咏恒 2024-12-20 15:08:06

处理此问题的另一种方法是,除了 CURLOPT_CONNECTTIMEOUT_MS 之外,还将 CURLOPT_NOSIGNAL 选项设置为 1。请参阅http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html 了解更多信息。

Another way of dealing with this would be to set the CURLOPT_NOSIGNAL option to 1 in addition to the CURLOPT_CONNECTTIMEOUT_MS. See http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文