我有一个控制器,它必须将接收到的请求(更改一些查询参数)转发到另一台服务器,并返回它的响应(具有相同的标头、状态和正文)。
我决定使用 HttpClient 来做到这一点。
问题是 HttpClient 转换了内容(即:放气 gzip 请求),它破坏了输出响应。
这是示例的一部分:
$response = $client->request($request->getMethod(), $extUrl, [
'headers' => $reqHeaders,
'timeout' => 45,
'verify_host' => false,
'verify_peer' => false,
'body' => $request->getContent(),
]);
#response data
$body = $response->getContent(false);
$statusCode = $response->getStatusCode();
$headers = $response->getHeaders(false);
return new Response($body, $statusCode, $headers);
考虑到第二个服务器返回一个 gzip 压缩的内容,响应被破坏了,因为它会保留响应头(内容类型)但 $body 不会完全相同,因为 HttpClient 帮我缩小内容的好处。
问题是:有没有办法告诉 HttpClient 不要触摸我的响应正文?
或者:有没有更好的方法来制作这个“代理”控制器动作?