CURLOPT_CONNECTTIMEOUT是允许与服务器建立连接的最长时间(秒)。可以将其设置为0以禁用此限制,但在生产环境中不建议这样做。 CURLOPT_TIMEOUT是以秒为单位的最大时间量,执行单个cURL扩展函数调用将被限制在该时间内。请注意,此设置的值应包括CURLOPT_CONNECTTIMEOUT的值。 换句话说,CURLOPT_CONNECTTIMEOUT是由CURLOPT_TIMEOUT表示的时间段,因此CURLOPT_TIMEOUT的值应该大于CURLOPT_CONNECTTIMEOUT的值。 从Difference between CURLOPT_CONNECTTIMEOUT and CURLOPT_TIMEOUT开始
5条答案
按热度按时间eblbsuwk1#
CURLOPT_CONNECTTIMEOUT不是由CURLOPT_TIMEOUT表示的时间段
如果CURLOPT_CONNECTTIMEOUT设置为3秒,CURLOPT_TIMEOUT设置为4秒,则执行可能需要7秒。
我通过模拟缓慢的服务器连接(iptables drop)对此进行了测试。
hc2pp10m2#
CURLOPT_CONNECTTIMEOUT是允许与服务器建立连接的最长时间(秒)。可以将其设置为0以禁用此限制,但在生产环境中不建议这样做。
CURLOPT_TIMEOUT是以秒为单位的最大时间量,执行单个cURL扩展函数调用将被限制在该时间内。请注意,此设置的值应包括CURLOPT_CONNECTTIMEOUT的值。
换句话说,CURLOPT_CONNECTTIMEOUT是由CURLOPT_TIMEOUT表示的时间段,因此CURLOPT_TIMEOUT的值应该大于CURLOPT_CONNECTTIMEOUT的值。
从Difference between CURLOPT_CONNECTTIMEOUT and CURLOPT_TIMEOUT开始
e7arh2l63#
接受的答案不正确。请参阅Everything CURL文件以取得正确的文件。
基本上,连接时间包括建立http连接的两个方面:
CURLOPT_TIMEOUT或CURLOPT_TIMEOUT_MS选项根本不包括这段时间。这些选项涵盖了在连接阶段刚建立的TCP连接上开始使用HTTP之后发生的所有事情。
这种区别会给很多人带来麻烦,但它确实允许设置一个相对较短的连接超时,因为如果服务器完全不可用,为什么还要等待它呢?然而,如果服务的预期响应时间很难预测,您仍然可以将请求超时设置得相当长。
通常,对于生产设置,CURLOPT_CONNECTION_TIMEOUT应小于5秒,并且CURLOPT_TIMEOUT应尽可能低(不会导致您经常丢弃请求)。
h7wcgrx34#
CURLOPT_CONNECTTIMEOUT是仅连接到服务器的时间。
CURLOPT_TIMEOUT是整个连接时间加上交换数据的时间。
因此,CURLOPT_TIMEOUT始终包含CURLOPT_CONNECTTIMEOUT。
使用CURLINFO_CONNECT_TIME和CURLINFO_TOTAL_TIME来验证是否非常简单。
当然,$yourMaxTotTime必须始终大于$yourMaxConnTime。所有这些值都以秒为单位。
jhiyze9q5#
除了accepted answer。
根据源代码,连接设置:如果两者都设置了,则使用最严格的限制。2但仅在连接阶段。
源代码的单元测试