如何对来自客户端的请求做出尖锐的回应?

时间:2019-07-29 14:11:54

标签: php laravel guzzle

我有一个在Web服务器A上运行的应用程序。我有另一个在Web服务器B上运行的应用程序。两个Web服务器都需要登录。我需要做的是请求Web服务器A传递到Web服务器B,然后将文件返回给客户端,而无需让客户端登录到Web服务器B。(换句话说,Web服务器B对客户端是不可见的,我将我从A向B的请求中照顾身份验证凭据。下面的代码建立在laravel框架上,但是我不认为答案需要特定于laravel。

该代码有效,但仅将文件的HEAD信息返回给调用客户端。不是文件本身。

任何帮助将不胜感激!

控制器:

    public function getAudioFile(Request $request)
{
    //This is the id we are looking to pull
    $uid = $request->uniqueid;
    $audioServices = new AudioServices();
    return $audioServices->getWavFile($uid);
}

服务:

    public function getWavFile(String $uniqueId)
{
    $client = new GuzzleHttp\Client(['verify' => false]);
    return $client->request('GET', $this->connectString.$uniqueId, ['auth' =>  ['username', 'password']]);
}

1 个答案:

答案 0 :(得分:1)

As mentioned by bishop,您可以使用Guzzle的sink选项来流式传输Guzzle请求的响应。

您可以将该流传递给控制器​​的响应。我不确定Laravel是否具有内置的流支持,但是不确定underlying symfony httpfoundation components do。可以在in this tutorial中找到其用法示例。

如果您不想使用Guzzle的sink选项,也可以将响应本身用作that implements PSR-7 stream objects

相关问题