我试图从一台服务器到另一台服务器击中API,并在curl_error($curl);
http/2流中获得此响应,并未干净地关门:>。获取此错误消息的频率很低,在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);
查询与此链接卷曲php http/2流0的查询相同。
再次要求它作为上一个链接中没有解决的解决方案,即使在其他任何位置也没有。
我遇到了完全相同的问题,在我的情况下,@codykl的评论实际上解决了它,因此我认为我会把它变成其他人参考的答案。<<<<<<<<<<<<
简短答案:
将以下行添加到您的卷发请求中,所有内容均应解决
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。