我正在使用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,
]]);