PHP Curl错误HTTP / 2流0未完全关闭:PROTOCOL_ERROR(错误1)

时间:2019-07-03 07:39:36

标签: php curl

我试图将API从一台服务器连接到另一台服务器,并在curl_error($curl);中得到以下响应: HTTP / 2流0未被彻底关闭:PROTOCOL_ERROR(错误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上的询问

相同

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

1 个答案:

答案 0 :(得分:7)

我碰到了这个完全相同的问题,@ 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的旧服务器的卷曲请求指定CURLOPT_HTTP_VERSION。