我有一个在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']]);
}
答案 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。