我正在使用 Http 客户端向外部 API 发送请求。根据文档,我可以将默认标头添加到特定路由,如下所示:
framework:
http_client:
scoped_clients:
the_api:
base_uri: '%env(the_url)%'
headers:
Authorization: 'Bearer %env(my_token)%'
Run Code Online (Sandbox Code Playgroud)
那对我不起作用。我也试过这个选项:
auth_bearer: '%env(my_token)%'
Run Code Online (Sandbox Code Playgroud)
一样的效果。
在我用来提出请求的服务中,我有:
$response = $client->request('POST', $theUrl, [
'body' => $dataArray
]);
Run Code Online (Sandbox Code Playgroud)
通过上述配置,我得到了 403 响应,就好像没有发送令牌一样。如果我将它添加到request()函数中,但是它可以工作:
$response = $client->request('POST', $theUrl, [
'body' => $dataArray,
'headers' => [
'Authorization' => 'Bearer ' . $myToken
]
]);
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来避免在我的服务或控制器中获取令牌。将来我可能会向 API(或不同的 API)发送其他请求,我不想为每个请求都设置令牌。
如果重要的$theUrl是https。Symfony 和 Http 客户端版本:4.4
the_api在您的情况下,您必须使用客户名称。
#config/packages/framework.yaml
framework:
http_client:
scoped_clients:
name_client:
base_uri: 'http://ip:port/'
auth_basic: 'user:password'
Run Code Online (Sandbox Code Playgroud)
客户名称在这里 name_client
#src/Controller/MyController.php
...
public function __construct(HttpClientInterface $name_client)
{
$this->client = $name_client;
}
...
Run Code Online (Sandbox Code Playgroud)
$name_client将包含具有ScopingHttpClient指定参数的类的实例
享受!
小智 0
我遇到了类似的问题,我的范围客户端没有添加默认授权标头。我的解决方案是在我的服务中注入令牌并初始化一个全新的平面HttpClient对象,如下所示:
$client = \Symfony\Component\HttpClient\HttpClient::create(['headers' => [
'Authorization' => 'Bearer '. $this->token,
]]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1312 次 |
| 最近记录: |