[英]How do I make a guzzle response into a response to a request from a client?
我有一个在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']]);
}
如主教所述,您可以使用Guzzle的接收sink
选项来流式传输Guzzle请求的响应。
您可以将该流传递给控制器的响应。 我不确定Laravel是否具有内置的流支持,但是底层的symfony httpfoundation组件可以 。 在本教程中可以找到其用法的示例。
如果您不想使用Guzzle的接收sink
选项,则还可以使用响应本身,因为它实现了PSR-7流对象 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.