CURL超时时间设置

Posted 张三的哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CURL超时时间设置相关的知识,希望对你有一定的参考价值。

一次完整的http请求,一般包含三个步骤:

  1. 通过DNS把域名解析成IP
  2. 通过IP地址连接到目标主机
  3. 获取目标主机数据(1、给目标主机输出http请求头,以\r\n\r\n结尾;2、获取目标主机传过来的数据)

php 的 curl 对以上三个步骤都有设置超时时间的方法

1、保存DNS信息时间

CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。

2、连接超时时间

CURLOPT_CONNECTTIMEOUT 以秒为单位。如果设置为0,则无限等待。

CURLOPT_CONNECTTIMEOUT_MS 以毫秒为单位。如果设置为0,则无限等待。

3、执行超时时间( DNS解析+连接+提交请求数据+获取请求数据? 或是 提交请求数据+获取请求数据 ?)

CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。

CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 

注意:

1、毫秒级设置在cURL 7.16.2中被加入。从PHP 5.2.3开始可用的。如果需要进行毫秒超时,需要增加:

curl_easy_setopt(curl, CURLOPT_NOSIGNAL,1L);

//或者

curl_setopt ( $ch, CURLOPT_NOSIGNAL,true);

2、cURL的超时既是socket的超时,因为底层就是socket,所以cURL的默认时间可以在 php.ini 里面设置

default_socket_timeout = 60

3、提交请求数据包括header和body,header和body之间用 \r\n\r\n 隔开,获得请求数据一样。这是http的规定。

以上是关于CURL超时时间设置的主要内容,如果未能解决你的问题,请参考以下文章

php使用curl设置超时的重要性

CURL超时时间设置

cURL中的超时设置

Nginx服务优化设置连接超时

h5设置请求超时时间

PHP cURL 超时设置 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的区别