Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gRPC PHP客户端HTTP头_Php_Http Headers_Grpc - Fatal编程技术网

gRPC PHP客户端HTTP头

gRPC PHP客户端HTTP头,php,http-headers,grpc,Php,Http Headers,Grpc,我试图在用PHP编写的gRPC客户端调用中设置一些HTTP头。我已经阅读了所有关于gRPC的PHP实现的文档,但找不到任何说明如何在PHP中实现这一点的内容。通过阅读其他语言的文档,我开始认为头是在客户机元数据中指定的。然而,我找不到任何关于如何在php中格式化这些内容的信息,而且我尝试的所有格式似乎都不起作用。这是我目前的代码: $options = [ 'credentials' => $this->credentialsObject, 'update_metadata'

我试图在用PHP编写的gRPC客户端调用中设置一些HTTP头。我已经阅读了所有关于gRPC的PHP实现的文档,但找不到任何说明如何在PHP中实现这一点的内容。通过阅读其他语言的文档,我开始认为头是在客户机元数据中指定的。然而,我找不到任何关于如何在php中格式化这些内容的信息,而且我尝试的所有格式似乎都不起作用。这是我目前的代码:

$options = [
  'credentials' => $this->credentialsObject,
  'update_metadata' => function($metaData){
    $metaData['headers'] = ['Authorization' => 'Bearer ' . $this->token];
    return $metaData;
  }
];

$client = new OrganizationServiceClient($this->url,$options);

$r = new \Google\Protobuf\GPBEmpty();
list($data,$status) = $client->list($r)->wait();
我从中得到的响应与我根本没有设置授权头的响应相同(
拒绝访问!
),尽管我被告知我的用户应该有查看该资源的权限

我无法访问任何服务器日志来帮助调试(尽管我正在尝试访问它们——可能第二天就能访问)

任何帮助或指点都将不胜感激。我已经为此工作了几天,感觉我已经尝试了我能想到的一切


谢谢

我通过向grpc.io谷歌小组提问,获得了解决问题所需的信息。这是线程:

解决方案的要点是gRPC使用HTTP2(如此不同的头语法),元数据与头等效。下面是我的更新代码。下面是重要的一行
$metaData['authorization']=['Bearer'.$this->token]。请注意,
$metaData
数组键与HTTP2头键相同,该值是一个数组,其中头值为字符串

$options = [
  'credentials' => $this->credentialsObject,
  'update_metadata' => function($metaData){
     $metaData['authorization'] = ['Bearer ' . $this->token];
     return $metaData;
  }
];

$client = new OrganizationServiceClient($this->url,$options);

$r = new \Google\Protobuf\GPBEmpty();
list($data,$status) = $client->list($r)->wait();