未添加Symfony Http客户端默认标头



我正在使用Http客户端向外部API发送请求。根据文档,我可以将默认标头添加到特定的路由中,如下所示:

framework:
http_client:
scoped_clients:
the_api:
base_uri: '%env(the_url)%'
headers:
Authorization: 'Bearer %env(my_token)%'

这对我不起作用。我也尝试过这个选项:

auth_bearer: '%env(my_token)%'

同样的效果。

在我用来提出请求的服务中:

$response = $client->request('POST', $theUrl, [
'body' => $dataArray
]);

使用上面的配置,我得到一个403响应,就好像没有发送令牌一样。如果我把它添加到request()函数中,但它可以工作:

$response = $client->request('POST', $theUrl, [
'body' => $dataArray,
'headers' => [
'Authorization' => 'Bearer ' . $myToken
]
]);

我正在寻找一种方法来避免在我的服务或控制器中获取令牌。将来我可能会向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'

此处为客户端名称name_client

#src/Controller/MyController.php
...
public function __construct(HttpClientInterface $name_client)
{
$this->client = $name_client;
}
...

$name_client将包含具有指定参数的ScopingHttpClient类的实例

享受吧!

我也遇到过类似的问题,我的作用域客户端没有添加默认的授权头。我的解决方案是在我的服务中注入令牌,并初始化一个全新的平面HttpClient对象,如下所示:

$client = SymfonyComponentHttpClientHttpClient::create(['headers' => [
'Authorization' => 'Bearer '. $this->token,
]]);

最新更新