Php Guzzle Pool:如何在不超时的情况下等待所有请求完成?

Php Guzzle Pool:如何在不超时的情况下等待所有请求完成?,php,curl,guzzle,guzzlehttp,Php,Curl,Guzzle,Guzzlehttp,在过去的6个月里,我一直在使用Guzzle池从外部服务器请求数据(每个请求大约1-2MB)。我一次同时做5个请求。但是,情况发生了变化,外部服务器似乎过载,因此变得非常缓慢。有时速度非常快,比如1-2秒,但很多时候服务器需要为每个请求等待2分钟以上 但这不应该是个问题。但是现在(由于发出请求的速度变慢),池中的一些请求返回错误: cURL错误18:传输关闭,未完成的读取数据剩余 它通常在等待2分钟后完成 但有趣的是,如果我通过邮递员(例如)提出请求,我仍然需要等待2-3分钟以上,但我最终得到了响

在过去的6个月里,我一直在使用Guzzle池从外部服务器请求数据(每个请求大约1-2MB)。我一次同时做5个请求。但是,情况发生了变化,外部服务器似乎过载,因此变得非常缓慢。有时速度非常快,比如1-2秒,但很多时候服务器需要为每个请求等待2分钟以上

但这不应该是个问题。但是现在(由于发出请求的速度变慢),池中的一些请求返回错误:

cURL错误18:传输关闭,未完成的读取数据剩余

它通常在等待2分钟后完成

但有趣的是,如果我通过邮递员(例如)提出请求,我仍然需要等待2-3分钟以上,但我最终得到了响应

这让我相信Guzzle在2分钟后阻止了请求。一、 但是,找不到任何设置来更改此设置。我甚至尝试发送
保持活动状态
内容长度
标题,但它们都不起作用(也许我没有正确使用它们)

这是我当前代码的一部分,用于处理Guzzle池请求。(我使用的是PHP7.1、Guzzle 6.3和Laravel 5.7)

不幸的是,我无法共享外部服务器URL,因为它是私有的

我在这里做错了什么,不允许请求等待它完成/发送数据



更新:我尝试了@Alexey Shokov的建议,该建议摆脱了被拒绝的州。请求现在没有在2分钟内超时。然而,一旦我从那些先前超时的
源中得到一些东西,我就会得到null作为响应。

看起来服务器端出现了问题。该错误表明cURL客户机发现预期响应大小与服务器发送的实际响应大小不匹配


看看,同样的问题。我认为尝试将HTTP版本设置为1.0是值得的,如与
Request
对象的讨论中所述或直接在
对象中所述(
生成新请求('GET',$url,$headers,null,'1.0')
)。

感谢您的回答。我已经尝试过这样做,我不再收到任何错误(拒绝),但是我在响应数据中得到了“null”。为什么它在像PostMan这样的软件上工作得很好,但在Guzzle上却不工作?
$headers = ['Authorization' => 'Bearer ' . $token];

$client  = new Client();

$requests = function ($urls, $headers)
{
    foreach ($urls as $key => $url)
    {
        yield new Requests('GET', $url, $headers);
    }
};

$pool = new Pool($client, $requests($urls, $headers),
[
    'concurrency' => 5,
    'fulfilled'   => function ($response, $index)
    {
        echo 'fulfilled -> ' . $index;
    },
    'rejected' => function ($reason, $index)
    {
        echo 'rejected -> ' . $index . ' -> error:' . $reason->getMessage();
    },
]);

$promise = $pool->promise();
$promise->wait();