gRPC PHP客户端HTTP标头

问题描述 投票:1回答:1

我试图在用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();

我从中获得的响应与我根本没有设置授权标头(Access Denied!)相同,尽管我被告知我的用户应该有权查看该资源。

我没有访问任何服务器日志来帮助调试那一方(虽然我试图访问它们 - 可能在第二天)。

任何帮助或指示将不胜感激。我一直在研究这几天,感觉我已经尝试了所有我能想到的东西。

谢谢!

php http-headers grpc
1个回答
0
投票

通过在grpc.io google组中提问,我能够获得解决问题所需的信息。这是线程:https://groups.google.com/forum/#!searchin/grpc-io/php%7Csort:date/grpc-io/p4-P78_EOyY/pHHR6Q5OBwAJ

解决方案的要点是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(); 
© www.soinside.com 2019 - 2024. All rights reserved.