【问题标题】:PHP Curl error HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)PHP Curl 错误 HTTP/2 流 0 未完全关闭:PROTOCOL_ERROR (err 1)
【发布时间】:2019-07-03 07:39:36
【问题描述】:

我正在尝试将 API 从一台服务器发送到另一台服务器,并在 curl_error($curl); 中获得此响应 HTTP/2 流 0 未完全关闭:PROTOCOL_ERROR (err 1)。收到此错误消息的频率很低,在 10 次尝试中只有 1 到 2 次。

但是为什么我会收到这个错误,是我失踪的任何具体原因吗?

我的卷曲代码是:

$data = http_build_query(array('param1' => 'test','status' => 'Success'));
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "server api link");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec($curl);
if (curl_error($curl)) {
    $error_msg = curl_error($curl);
}

print_r($error_msg);
curl_close($curl);

查询与此链接curl php HTTP/2 stream 0 was not closed cleanly所问的相同

再次询问,因为在上一个链接中没有找到解决方案,即使在任何其他位置也没有。

【问题讨论】:

  • 尝试使用HTTP1.1:curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  • 您是否检查过 API 文档是否包含一些示例?也许您完全以错误的方式使用 API
  • @CodyKL :在我的代码中实现了您的解决方案,并对其进行了几天的观察。将在 2 到 3 天内回复我的反馈。

标签: php curl


【解决方案1】:

我遇到了同样的问题,@CodyKL 的评论实际上解决了我的问题,所以我想我会把它变成一个答案供其他人参考。

简答:

将以下行添加到您的 curl 请求中,一切都会得到解决

curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

略长一点的答案:

从 curl 7.62.0 开始,默认选项是:CURL_HTTP_VERSION_2TLS

在此之前默认是:CURL_HTTP_VERSION_1_1

一些较旧的 API 等似乎与最新的 HTTP 版本不兼容。较新版本的 CURL 将默认使用此协议,因此会失败。这可能会导致一些相当混乱的行为,因为在一台机器上运行的脚本可能不一定在另一台机器上运行。为了最大限度地提高兼容性,您最好为不支持 CURL_HTTP_VERSION_2TLS 的旧服务器的 curl 请求指定 CURLOPT_HTTP_VERSION。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2023-01-07
    • 2021-10-25
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2021-12-09
    相关资源
    最近更新 更多