我有一个控制器,它必须将收到的请求(更改一些查询参数)转发到另一台服务器,并返回它的响应(具有相同的头、状态和主体)。
我决定使用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内容,响应被中断,因为它将保留响应头(content-type),但$body将不完全相同,因为HttpClient会帮我缩减内容。
问题是:有没有办法告诉HttpClient不要在我的响应体内触碰?
或者:是否有更好的方法来执行此“代理”控制器操作?
我发现,如果在请求头中定义了accept-encoding
,则它不会被CurlResponse类膨胀。。。
#\Symfony\Component\HttpClient\Response\ResponseTrait::$inflate
$this->inflate = !isset($options['normalized_headers']['accept-encoding']);
和
#\Symfony\Component\HttpClient\Response\response
$response->inflate = \extension_loaded('zlib') && $response->inflate && 'gzip' === ($response->headers['content-encoding'][0] ?? null) ? inflate_init(ZLIB_ENCODING_GZIP) : null;
因此,我为这些情况指定了一些空编码。
if (empty($request->headers->get('accept-encoding'))) {
//adding some accept-encoding will make httpclient response not to deflate the response (gzdecode) automatically
$request->headers->add(['accept-encoding'=> '']);
}
我仍然不知道这是否是转发请求及其在控制器中的响应的最佳方法,但是上面的解决方案解决了我的问题。
我的任务是简单地制作一个控制器,当它们准备好时立即给我结果(下面的简单示例) 我想得到字符串的确切数量(例如1000个字符串,以某种方式为1秒)(实际上我需要得到func的结果,但为了简化任务,只是字符串) 因此,当我在控制器中收到一些请求时,我希望它能以这种方式在它们准备好后尽快给出答案(无需缓冲结果): 1秒钟 “一些绳子”- 1秒钟 “另一个”- 1秒钟 “第三个”- 1000秒 “一些绳子
我正在阅读Symfony通过自定义用户提供商管理用户的方法:https://symfony.com/doc/current/security/custom_provider.html 当用户提交用户名和密码时,身份验证层要求配置的用户提供程序返回给定用户名的用户对象。Symfony然后检查此用户的密码是否正确,并生成安全令牌 当我们在本地使用用户/密码连接到数据库时,这非常有效,但是我想对另一个服
我试着像FOSRestBundleByExample/blob那样做。 我的行动: 不过,我有以下回应: 控制器必须返回一个响应(给定对象(FOS\RestBundle\View\View))。 我发现我可以在配置中将view\u response\u listener更改为true,但我有: 无法找到模板""。 有什么想法吗? 谢谢你,卡米尔
伙计们,在我的控制器中执行rest后,我有问题从变量中获取数据。这里有一个例子来说明我的问题。 控制器 JavaScript drawDiagram.html null
我试图用Spring boot 1.5.9.RELEASE来构建一个rest api,却被这个问题卡住了。对apiendpoint的post请求工作得很好,但是当到达get请求时,结果会重复。应用程序对get请求产生的响应是 关联的请求映射类代码 响应类 对如何解决这个问题有什么想法吗?预先感谢
我用的是symfony4.4。7并使用HTTPClient(Symfony\Component\HTTPClient\HTTPClient)发出http请求,但探查器中未显示请求。如何使此探查器选项卡正常工作?