我有一个简单的PHP脚本,它使用cURL来获取URL的内容:
$curlOptions = [
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HEADER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_MAXREDIRS => 5,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT => 5,
CURLOPT_NOBODY => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
];
$curl = curl_init();
curl_setopt_array( $curl, $curlOptions );
$curlResult = curl_exec( $curl );
$status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );
然而,在某些情况下,我清楚地看到持续时间为20秒或更长时间,尽管我指定CURLOPT_CONNECTTIMEOUT
和CURLOPT_TIMEOUT
的较低超时值。
如何以我指定的值使cURL超时?
更新
需要20秒才能完成的所有cURL返回"状态"它可能是一个无法解析主机的DNS问题。我会假设CURLOPT_CONNECTTIMEOUT
会照顾这个吗?
答案 0 :(得分:0)
您的代码似乎完美无缺。 我创建了一个简单的睡眠页面,您可以检查它(将睡眠时间作为输入)。
如果您发现代码没有超时的情况,我建议检查状态代码,并查看代码是否挂在其他部分(可能不是卷曲本身)。
<?php
$url = "http://funnify.me/sleep.php?sleep=12"; // time in seconds
$curlOptions = [
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HEADER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_MAXREDIRS => 5,
CURLOPT_CONNECTTIMEOUT => 8,
CURLOPT_TIMEOUT => 8,
CURLOPT_NOBODY => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
];
$curl = curl_init();
curl_setopt_array( $curl, $curlOptions );
$curlResult = curl_exec( $curl );
$status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );
echo $status;
?>
干杯, IKA