在我的Yii2应用程序中,我尝试从REST API读取数据,该REST API受HTTP-Basic-Auth保护。另外,还需要一个代理来连接REST api。
因此,我选择了Yii httpclient-module来处理此调用:
$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从代码复制到浏览器(也连接到代理),则一切正常:出现Basic-Auth窗口。
设置标题的
Authorization
标记时是否出错? 最佳答案
在解决这个问题一天后,在找到答案。在问了我问题仅一分钟后,但我想保留这个问题,以防有人遇到相同的问题。
回答:
yii2 httpclient使用2个不同的传输库:Streams(它没有附加的PHP扩展名,并且默认设置)和cURL。
切换到cURL作为“ transport-type”,上面的代码可以正常工作!
$this->client = new Client([
'baseUrl' => 'http://my.example.com',
'transport' => 'yii\httpclient\CurlTransport'])