当我尝试向苹果的推送服务发送一个HTTP/2.0的POST请求时,我遇到了奇怪的行为:
$http2ch = curl_init();
curl_setopt($http2ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($http2ch, CURLOPT_URL, 'https://api.push.apple.com/3/device/megauniquedevicetokendummy');
curl_setopt($http2ch, CURLOPT_PORT, 443);
curl_setopt($http2ch, CURLOPT_HTTPHEADER, $httpHeader);
curl_setopt($http2ch, CURLOPT_POST, true);
curl_setopt($http2ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($http2ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($http2ch, CURLOPT_TIMEOUT, 30);
curl_setopt($http2ch, CURLOPT_HEADER, 1);
$result = curl_exec($http2ch);
if ($result === false) {
throw new \Exception("Curl failed: " . curl_error($http2ch) . " | " . curl_getinfo($http2ch, CURLINFO_HTTP_CODE));
}
异常抛出信息为: Curl failed: Received HTTP/0.9 when not allowed | 0。
我明确告诉curl在代码片段的第二行使用HTTP/2.0。是否有人知道这个错误消息的含义,以及为什么curl使用如此老旧的HTTP版本?
我的PHP版本为7.2,curl版本为7.66.0。
curl: (1) Unsupported protocol
。如果我从我的Mac发送完全相同的请求,则可以直接使用。 - rockZ