我试图将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上的询问
相同再次询问,因为在先前的链接中找不到解决方案,即使在其他任何位置也没有。
答案 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。