如何将卷曲外部原始响应转发到SF Response对象?

时间:2016-11-20 20:21:19

标签: php symfony

我需要在Symfony 3应用程序(服务器1)中创建路由,该应用程序必须在服务器2上发送(过滤的)请求,然后发送回服务器2给出的确切响应(相同的HTTP状态代码,标题和正文)。

使用原生curl Php库,您可以通过将CURLOPT_HEADER选项设置为True来获取原始响应(包括标题)。

但是来自Symfony Response的{​​{1}}对象似乎只能通过设置单独的标头(在构造函数内部,或使用HttpFoundation)和body(使用$response->headers->set()来配置。我没有找到一种方法将原始响应(带标题)设置到$response->setContent()对象中。

是否可能,或者如何以其他方式完成?

这是我的尝试:

Response

2 个答案:

答案 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