使用HttpFoundation Request类时,如何检查API响应的HTTP状态码?
检查API B响应状态码的实现方式
你搞混了Request和Response的职责——Request只是用来构造要发送的请求,响应的状态码是在Response对象里获取的,HttpFoundation的Request本身不负责处理响应状态。
具体实现步骤很简单:
- 发送构造好的请求,拿到API B返回的Response实例
- 调用Response的
getStatusCode()方法获取状态码,判断是否为200
给你一段实际代码示例(用Symfony HttpClient实现,这是和HttpFoundation搭配最常用的组件):
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Contracts\HttpClient\HttpClientInterface; public function proxyApiRequest(Request $apiARequest, HttpClientInterface $client) { // 构造发给API B的请求 $apiBRequest = Request::create( 'https://api-b.example.com/target-endpoint', $apiARequest->getMethod(), $apiARequest->request->all(), $apiARequest->cookies->all(), $apiARequest->files->all(), $apiARequest->server->all() ); // 发送请求到API B $apiBResponse = $client->request( $apiBRequest->getMethod(), $apiBRequest->getUri(), [ 'headers' => $apiBRequest->headers->all(), 'body' => $apiBRequest->getContent(), ] ); // 获取并检查状态码 $statusCode = $apiBResponse->getStatusCode(); if ($statusCode !== 200) { // 非200状态的处理逻辑,比如返回错误给API A return new Response( sprintf('API B request failed with status code: %d', $statusCode), 503 ); } // 状态正常,把API B的响应原封不动返回给API A return new Response( $apiBResponse->getContent(), 200, $apiBResponse->getHeaders() ); }
如果你的项目用的是其他HTTP客户端(比如Guzzle),逻辑也是一样的:只要拿到响应对象,调用对应的状态码方法(比如Guzzle的getStatusCode())就行,核心就是状态码是响应的属性,和请求类无关。
内容的提问来源于stack exchange,提问作者FatGuyLaughing
相关产品推荐
相关产品推荐

