我需要在Symfony 3应用程序(服务器1)中创建路由,该应用程序必须在服务器2上发送(过滤的)请求,然后发送回服务器2给出的确切响应(相同的HTTP状态代码,标题和正文)。
使用原生curl
Php库,您可以通过将CURLOPT_HEADER
选项设置为True
来获取原始响应(包括标题)。
但是来自Symfony Response
的{{1}}对象似乎只能通过设置单独的标头(在构造函数内部,或使用HttpFoundation
)和body(使用$response->headers->set()
来配置。我没有找到一种方法将原始响应(带标题)设置到$response->setContent()
对象中。
是否可能,或者如何以其他方式完成?
这是我的尝试:
Response
答案 0 :(得分:0)
你应该可以使用(例如):
$response->headers->set('Content-Type', 'text/plain');
这里描述: http://symfony.com/doc/current/components/http_foundation.html#response
The Response API也描述了每种方法。我不确定你需要发送什么类型的标题。
答案 1 :(得分:0)
我遇到了完全相同的问题。我基本上想由控制器将CurlResponse
作为Response
转发。
我使用标准Symfony HttpClient实现了以下操作:
public function myAction()
{
/** @var Request $request */
$request = $this->container->get('request_stack')->getCurrentRequest();
$my_query_string = http_build_query($request->query->all());
$client = HttpClient::create();
$url = 'http://localhost?'.$my_query_string;
$response = $client->request('GET', $url);
$statusCode = $response->getStatusCode();
$headers = $response->getHeaders();
$content = $response->getContent();
return new JsonResponse($content, $statusCode, $headers);
}
如果您的内容已经是 Json ,则将可选参数true
添加到JsonResponse
。