客户端证书身份验证的卷曲错误
Curl error with client certificate authentication
我必须调用需要客户端证书身份验证的 api。
我在邮递员中测试了这个 api 并获得了客户认证并且它运行良好。
现在我想用 php curl 来做。
我尝试了下面的代码,但它给了我以下错误。
HTTP/2 stream 0 was not closed cleanly: HTTP_1_1_REQUIRED (err 13)
$url = 'https://someurl';
$json = 'somejson';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_SSLCERT, __DIR__."/certificate.pem");
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, __DIR__."/privatekey.key");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$responseData = curl_exec($ch);
if(curl_errno($ch)) {
echo curl_error($ch);
}
curl_close($ch);
错误消息包含您需要的所有线索:HTTP_1_1_REQUIRED
HTTP/2 不支持 TLS 客户端证书,因此您需要通过明确要求确保使用 HTTP/1.1 完成您的 curl 请求。否则,curl 将在 HTTPS URL 上默认升级到 HTTP/2。
将 CURLOPT_HTTP_VERSION
设置为 CURL_HTTP_VERSION_1_1
。
我必须调用需要客户端证书身份验证的 api。 我在邮递员中测试了这个 api 并获得了客户认证并且它运行良好。 现在我想用 php curl 来做。 我尝试了下面的代码,但它给了我以下错误。
HTTP/2 stream 0 was not closed cleanly: HTTP_1_1_REQUIRED (err 13)
$url = 'https://someurl';
$json = 'somejson';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_SSLCERT, __DIR__."/certificate.pem");
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, __DIR__."/privatekey.key");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$responseData = curl_exec($ch);
if(curl_errno($ch)) {
echo curl_error($ch);
}
curl_close($ch);
错误消息包含您需要的所有线索:HTTP_1_1_REQUIRED
HTTP/2 不支持 TLS 客户端证书,因此您需要通过明确要求确保使用 HTTP/1.1 完成您的 curl 请求。否则,curl 将在 HTTPS URL 上默认升级到 HTTP/2。
将 CURLOPT_HTTP_VERSION
设置为 CURL_HTTP_VERSION_1_1
。