使用Guzzle的Laravel中存在多个HTTP请求问题
我使用的是Guzzle版本6.3.3。我想从外部API发出多个HTTP请求。下面显示的代码非常适合我。这只是一个请求使用Guzzle的Laravel中存在多个HTTP请求问题,laravel,api,httprequest,guzzle,guzzle6,Laravel,Api,Httprequest,Guzzle,Guzzle6,我使用的是Guzzle版本6.3.3。我想从外部API发出多个HTTP请求。下面显示的代码非常适合我。这只是一个请求 public function getAllTeams() { $client = new Client(); $uri = 'https://api.football-data.org/v2/competitions/2003/teams'; $header = ['headers' => ['X-Auth-Token' => 'MyKey'
public function getAllTeams()
{
$client = new Client();
$uri = 'https://api.football-data.org/v2/competitions/2003/teams';
$header = ['headers' => ['X-Auth-Token' => 'MyKey']];
$res = $client->get($uri, $header);
$data = json_decode($res->getBody()->getContents(), true);
return $data['teams'];
}
但现在我想一次提出多个请求。在Guzzle的文档中,我找到了如何实现它,但它仍然不能正常工作。这是我尝试使用的代码
$header = ['headers' => ['X-Auth-Token' => 'MyKey']];
$client = new Client(['debug' => true]);
$res = $client->send(array(
$client->get('https://api.football-data.org/v2/teams/666', $header),
$client->get('https://api.football-data.org/v2/teams/1920', $header),
$client->get('https://api.football-data.org/v2/teams/6806', $header)
));
$data = json_decode($res->getBody()->getContents(), true);
return $data;
我得到一个错误:
传递给GuzzleHttp\Client::send()的参数1必须实现接口Psr\Http\Message\RequestInterface,给定数组在TeamsController中调用。
如果在每个URI之后删除$header
,则会出现以下错误:
导致“403禁止”响应:{“消息”:“您正在查找的资源受到限制。请传递一个有效的API令牌,并检查您的订阅(截断的…)
我尝试了几种使用API密钥设置X-Auth-Token
的方法,但仍然会出现错误,而且我不知道Guzzle有多少其他方法来设置它们
我希望有人能帮助我:)Guzzle 6对Guzzle 3使用了不同的方法,因此您应该使用类似以下的方法:
use function GuzzleHttp\Promise\all;
$header = ['headers' => ['X-Auth-Token' => 'MyKey']];
$client = new Client(['debug' => true]);
$responses = all([
$client->getAsync('https://api.football-data.org/v2/teams/666', $header),
$client->getAsync('https://api.football-data.org/v2/teams/1920', $header),
$client->getAsync('https://api.football-data.org/v2/teams/6806', $header)
])->wait();
$data = [];
foreach ($responses as $i => $res) {
$data[$i] = json_decode($res->getBody()->getContents(), true);
}
return $data;
查看同一主题(,)上的不同问题,以查看更多用法示例