2016-08-12 71 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'])