我在Sending HTTP/2 POST request in Ruby找到了类似的问题 但我想用PHP更新我的服务器
此处描述的基于HTTP / 2的新Apple推送通知API:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html
任何具有HTTP / 2经验的人都可以帮助我在PHP中作为客户端发出请求。
答案 0 :(得分:17)
PHP> = 5.5.24的CURL扩展支持HTTP / 2。 (自this commit)
您还需要安装libcurl - curl函数使用的基础库 - 启用HTTP / 2支持。这意味着比7.38.0更新的libcurl,但实际上,越新越好。 Libcurl必须在显式启用HTTP / 2支持的情况下构建,在编译时使用--with-nghttp2
标志。
只需使用curl,因为您通常会使用它,并通过传递CURL_HTTP_VERSION_2_0
将CURLOPT_HTTP_VERSION
选项设置为使用HTTP / 2。然后,如果客户端和服务器都支持请求,您将把请求升级到版本2 。
在PHP 5.5.24之前,如果libcurl是使用HTTP / 2支持构建的,则可以显式传入CURL_HTTP_VERSION_2_0
的int值,因为PHP仍会将其传递给libcurl。目前,它的值为3
- 这不应该更改,但可以。
if (!defined('CURL_HTTP_VERSION_2_0')) {
define('CURL_HTTP_VERSION_2_0', 3);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
答案 1 :(得分:6)
使用PHP> = 5.5.24不足以使用curl发出HTTP / 2请求,即使定义了CURL_HTTP_VERSION_2_0也是如此。如果您尝试向APNS(Apple推送通知服务)发出请求,您将收到如下错误消息:
?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534
由于curl是libcurl的binding,因此你必须在启用了http / 2的情况下使用curl。
有关示例代码,请参阅我的answer,在此处了解类似问题
对于安装程序,您可以按照此tutorial
进行操作答案 2 :(得分:2)
目前在PHP中没有直接的use GuzzleHttp\Client;
$client = new Client();
$client->get('https://http2.akamai.com/demo/tile-0.png', [
'version' => 2.0,
'debug' => true,
]);
支持。
想法将来直接添加到PHP的支持: https://wiki.php.net/ideas/php6#http2_support
第三方库Guzzle https://github.com/guzzle/guzzle支持HTTP / 2,如果安装了正确的php和curl版本:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
LatLng bangalore = new LatLng(12.9667, 77.5667);
mMap.addMarker(new MarkerOptions().position(bangalore).title("Bengaluru"));
float zoomLevel = 12;
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(bangalore, zoomLevel));
}
答案 3 :(得分:0)
查看我为此目的构建的Apache和CLI PHP Docker镜像,为官方PHP 5.6 docker库添加HTTP / 2支持。这消除了任何HTTP/2 client preface string missing or corrupt
错误。
一旦你拥有了合适的环境,为PHP尝试了几个JWS / JWT库我只发现Spomky-Labs/jose与APN完美配合。