【问题标题】:PHP cURL not taking time outs into accountPHP cURL 没有考虑超时
【发布时间】:2015-01-14 00:32:01
【问题描述】:

我有一个简单的 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 );

但是,在某些情况下,尽管我为 CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT 指定了较低的超时值,但我清楚地看到了 20 秒或更长时间的持续时间。

如何使 cURL 在我指定的值处超时?

更新:

所有需要 20 秒才能完成的 cURL 返回“状态”为 0。这可能是 DNS 问题,无法解析主机。我会假设CURLOPT_CONNECTTIMEOUT 会处理这个问题?

【问题讨论】:

  • 你试过 CURLOPT_TIMEOUT_MS 吗?
  • 我尝试将CURLOPT_TIMEOUT_MS 设置为 5000,但似乎没有什么不同。
  • 尝试重置卷曲“curl_reset($ch);”而不是设置超时
  • 我试过curl_reset,好像没什么区别。我已向问题添加了更新

标签: php curl


【解决方案1】:

看来您的代码运行良好。 我创建了一个简单的睡眠页面,您可以查看它(获取睡眠时间作为输入)。

如果您发现代码没有超时的情况,我建议检查状态码,并查看代码是否挂在其他部分(可能不是 curl 本身)。

<?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;
?>

干杯, 伊卡

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 2015-04-24
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2017-11-13
    • 2017-10-24
    相关资源
    最近更新 更多