[英]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.