php - gRPC PHP 客户端 HTTP header

标签 php http-headers grpc

我正在尝试在用 PHP 编写的 gRPC 客户端调用中设置一些 HTTP header 。我已阅读了我能找到的有关 gRPC PHP 实现的所有文档,但找不到任何指定如何在 PHP 中执行此操作的内容。通过阅读其他语言的文档,我开始认为 header 是在客户端元数据中指定的。但是,我找不到任何关于如何在 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();

我从中得到的响应与我根本没有设置授权 header (访问被拒绝!)相同,尽管我被告知我的用户应该有权查看该资源。

我无法访问任何服务器日志来帮助调试该端(尽管我正在尝试访问它们 - 也许第二天就能访问)。

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

谢谢!

最佳答案

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

解决方案的要点是 gRPC 使用 HTTP2(因此不同的 header 语法),元数据相当于 header 。下面是我更新的代码。这是重要的一行 $metaData['authorization'] = ['Bearer ' 。 $this-> token ];。请注意,$metaData 数组键与 HTTP2 header 键相同,并且值是一个数组,其中包含字符串形式的 header 值。

$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(); 

关于php - gRPC PHP 客户端 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262470/

相关文章:

json - 在 Go 中将带有枚举的 Protobuf3 转换为 JSON

javascript - 使用 dropzone laravel 通过电子邮件发送多个图像

http-headers - 静态 Assets 的 Netlify header 缓存控制

php - 如何使用控制缓存 header ?

curl - 我可以在命令行上通过 curl 设置 Content-Type 而不添加 "boundary=------"吗?

javascript - 如何获取 xmlhttprequest (AJAX) 的 URL

grpc - grpc 流媒体可以持续多久

grpc - gRPC 健康检查是否应该仅限于 gRPC 服务?

php - wordpress侧边栏和循环php代码相互扭曲

php - Android - 异常 : length=0; index=0