【问题标题】:Curl waiting until timeout before proceeding卷曲等到超时再继续
【发布时间】:2020-12-04 22:07:25
【问题描述】:

这是我正在执行的代码。

我尝试将超时变量设置为 30 秒和 3 秒。代码确实总是被执行,但在中间的某个地方它会停止并等待超时,然后才会打印“OK”。

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.website.com/" . $settings["api_key"] . "/auth");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_POST, 4);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array("refID" => $row["id"], etc...)));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    
    $output = curl_exec($ch);
    curl_close($ch);
    echo "OK";

我不确定如何调试它。取决于我尝试在哪里打印东西来调试它停止的地方,它不会打印任何东西,直到 curl 超时。

我不知道它是否相关,但是当我使用 Java 库发出完全相同的请求时,我得到了这个返回。可能是 PHP 也受到远程服务器上的这个“错误”的影响,这就是原因?如果是这样,我能以某种方式逃避这个错误吗?

dec 04, 2020 10:48:54 EM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNING: Invalid cookie header: "Set-Cookie: AWSALB=hSCo...; Expires=Fri, 11 Dec 2020 21:48:54 GMT; Path=/". Invalid 'expires' attribute: Fri, 11 Dec 2020 21:48:54 GMT
dec 04, 2020 10:48:54 EM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNING: Invalid cookie header: "Set-Cookie: AWSALBCORS=hSCo...; Expires=Fri, 11 Dec 2020 21:48:54 GMT; Path=/; SameSite=None; Secure". Invalid 'expires' attribute: Fri, 11 Dec 2020 21:48:54 GMT

任何帮助将不胜感激!

【问题讨论】:

  • 这看起来像是服务器发送了响应,但之后并没有关闭连接。
  • 谢谢,我会询问服务的开发者是否关闭他们的连接。

标签: php curl


【解决方案1】:

调用curl_exec 后检查错误。它可以帮助弄清楚发生了什么。

if(curl_exec($ch) === false) {
    echo 'curl error: ' . curl_error($ch);
}

另外建议设置这些选项CURLOPT_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYSTATUSfalse 禁用证书检查。

【讨论】:

  • 谢谢。但是没有发生错误,它什么也不打印。
  • 所以看起来 curl 完成了没有错误并且服务器出现了问题。尝试使用CURLOPT_VERBOSE 选项和日志选项将日志写入文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多