【发布时间】:2022-01-18 22:56:27
【问题描述】:
我正在尝试自定义 Symfony 应用程序 (6.0) 中的错误响应。 该应用程序使用 http 客户端向使用 oauth 令牌交换的外部 API 发出请求。如果令牌无效,API 会给出 401 响应
protected function request(string $token, string $url, array $query): array
{
//Create a new client
$httpClient = HttpClient::create(['base_uri' => self::API_URL]);
//Set up request headers
$headers = [
'Authorization' => 'Bearer ' . $token,
'Content-type' => 'application/json'
];
//Get response
$response = $httpClient->request('GET', $url, [
'headers' => $headers,
'query' => $query,
]);
//Return the body of the response object as an array
return $response->toArray();
}
当使用无效令牌对其进行测试时,它会引发 ClientException 类型的异常,这会给出 HTTP 500 内部服务器错误消息:
HTTP/2 401 returned for "https://www.strava.com/api/v3/athlete".
我希望捕获此错误并显示有关如何使用https://symfony.com/doc/current/controller/error_pages.html 中描述的方法修复它的信息。我认为这是一个 401 错误,我可以在一个名为 error401.html.twig 的页面中捕获它。
我的问题是为什么这个错误被视为 500 而不是 401?
【问题讨论】:
-
GET 请求没有请求正文,因此不需要内容类型标头。为什么每个人都这样做?