Wor*_*orp 5 php authentication guzzle
我正在创建以下GuzzleHttp\Psr7\Requests的多个:
use GuzzleHttp\Psr7\Request;
$myRequest = new Request(
'GET',
$someUri
);
Run Code Online (Sandbox Code Playgroud)
并将它们保存在一个数组中:$ guzzleRequests
然后我创建一个池来同时执行所有请求:
use GuzzleHttp\Pool;
$testPool = new Pool($testClient = new \GuzzleHttp\Client(), $guzzlePromises,
[
'fulfilled' => function ($response, $index) {
// this is delivered each successful response
var_dump($response);
},
'rejected' => function ($reason, $index) {
// this is delivered each failed request
var_dump($reason);
}
]);
// Initiate the transfers and create a promise
$promise = $testPool->promise();
// Force the pool of requests to complete.
$promise->wait();
Run Code Online (Sandbox Code Playgroud)
(摘自Doc:http://guzzle.readthedocs.org/en/latest/quickstart.html "并发请求"下)
这适用于对不需要身份验证的URI的请求,并返回200 OK状态.
如何向请求添加身份验证,以便池可以同时针对基本HTTP授权保护的API运行多个请求?
为了回应粉红色的vansia:我按照你的建议添加了标题:
$headers = [
'Authorization: Basic '. base64_encode($this->username.':'.$this->password),
];
$myRequest = new Request(
'GET',
$url,
$headers
);`
Run Code Online (Sandbox Code Playgroud)
并转储标题:
array (size=2)
'Host' =>
array (size=1)
0 => string '<myHost>' (length=27)
0 =>
array (size=1)
0 => string 'Authorization: Basic <veryLongAuthenticationString>' (length=<stringLength>)`
Run Code Online (Sandbox Code Playgroud)
响应仍然未经授权:
private 'reasonPhrase' => string 'Unauthorized' (length=12)
private 'statusCode' => int 401
Run Code Online (Sandbox Code Playgroud)
我终于让它运行了.事实证明,粉红色的vansia已经非常接近了.
确切的形式是最后一个问题.Michael Downling的评论让我走上正轨.
Authorization标头是要走的路,它需要是一个key => value mapping.
最后的事情看起来像这样:
$url = $myUrl.'?'.http_build_query($this->queryArray);
// ------------ Specify Authorization => key to make it work!!!
$headers = [
'Authorization' => 'Basic '. base64_encode($this->username.':'.$this->password)
];
// -----------------------------------------------------------
$myRequest = new Request(
'GET',
$url,
$headers
);
return $myRequest;
Run Code Online (Sandbox Code Playgroud)
您可以在Request中添加Basic Authentication标头,如下所示
$headers = [
'Authorization: Basic '. base64_encode($this->username.':'.$this->password)
];
$myRequest = new Request(
'GET',
$url,
$headers
);
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
UPDATE
正如@worps所指出的那样header
需要key => value
成对.所以最终解决方案如下,
$headers = [
'Authorization' => 'Basic '. base64_encode($this->username.':'.$this->password)
];
$myRequest = new Request(
'GET',
$url,
$headers
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2939 次 |
最近记录: |