在 PHP 中设置 Curl 的超时

2022-08-30 06:08:49

我正在通过php在eXist数据库上运行curl请求。数据集非常大,因此,数据库始终需要很长时间才能返回 XML 响应。为了解决这个问题,我们设置了一个curl请求,应该是一个很长的超时。

$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";

curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);

但是,curl 请求始终在请求完成之前结束(通过浏览器请求时,<1000)。有谁知道这是否是在curl中设置超时的正确方法?


答案 1

请参阅文档:http://www.php.net/manual/en/function.curl-setopt.php

CURLOPT_CONNECTTIMEOUT- 尝试连接时要等待的秒数。使用 0 可无限期等待。
- 允许执行 cURL 函数的最大秒数。CURLOPT_TIMEOUT

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds

也别忘了放大php脚本本身的执行时间:

set_time_limit(0);// to infinity for example

答案 2

嗯,在我看来,它定义了允许任何cURL函数执行的时间量。我认为您实际上应该查看,因为这会告诉cURL等待连接完成的最大时间。CURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT


推荐