我非常使用Guzzle的新手,我的php脚仍然非常柔软。尽管如此,我发现Guzzle很宽容。我按照下面的例子,在这里和那里调整:
use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
require __DIR__ . '/vendor/autoload.php';
$client = new GuzzleHttp\Client();
$requests = function ()
{
...[generate url]..
yield $index => new Request('GET', $theURL);
};
$pool = new Pool($client, $requests(), [
'concurrency' => 50,
'fulfilled' => function ($response, $index)
{
$content = $response->getBody()
->getContents();
file_put_contents('storage/' . $index, $content);
print 'fulfilled index:' . $index . PHP_EOL;
},
'rejected' => function ($reason, $index)
{
print 'rejected index:' . $index . PHP_EOL;
},
]);
$promise = $pool->promise();
$promise->wait();
这很好用,但有一种情况我需要知道URL。它失败了,但是我无法分辨/我提供的1000个URL中的哪个是失败的。我可以看到'索引',但我无法理解如何使用索引告诉我一些有意义的东西(特别是URL)。
var_dump( $response );
向我显示了响应,但没有显示网址。
var_dump( $index );
向我显示了一个索引,在本例中为int(1100)
,但我不知道如何使用它来为我带来好处。
有任何帮助吗?谢谢!