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

Mar*_* M. 5 http symfony

我正在使用 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

Ден*_*ван 7

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)