在我的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'])

09-05 08:09
查看更多