2016-08-12 222 views
2

在我的Yii2應用程序中,我嘗試從REST api讀取數據,該數據受HTTP-Basic-Auth保護。另外,還需要一個代理來連接REST API。 所以我選擇了Yii的HttpClient的模塊來處理這個呼叫:yii2-httpclient使用基本身份驗證和代理設置

$client = new Client(['baseUrl' => 'http://my.example.com']); 
$response = $client->createRequest() 
     ->setMethod('get') 
     ->setUrl('api/session') 
     ->addHeaders(['Authorization' => 'Basic '.base64_encode("user:password")]) 
     ->setOptions([ 
      'proxy' => 'proxy.server:8000', 
      'timeout' => 5, 
     ]); 

運行這段代碼,我得到一個錯誤Bad URL in proxy request消息形式傳遞到服務器。 但是,如果我從代碼複製到瀏覽器(也連接到代理)的URL,一切工作正常:基本認證窗口出現。

設置標頭的Authorization標籤時是否有錯誤?

回答

2

在這個問題上工作了一天之後,找到了答案。在問我的問題後一分鐘,但我喜歡在案件中保留這個問題,即某人有同樣的問題。

答案: yii2 httpclient使用2個不同的傳輸庫:Streams(沒有額外的PHP擴展,並設置爲默認值)和cURL。

切換到cURL爲「傳輸類型」,上面的代碼工作正常!

$this->client = new Client([ 
      'baseUrl' => 'http://my.example.com', 
      'transport' => 'yii\httpclient\CurlTransport'])