Задать вопрос

Как создать очередь http запросов с помощью Guzzle?

Здравствуйте, уважаемые разработчики!
Как создать очередь запросов к ресурсу с помощью guzzle?
use \GuzzleHttp\Pool;
use \GuzzleHttp\Client;

$kpLogin = "KP_LOGIN";
$kpPassword = "KP_PASSW";
$postData = [
	'shop_user' => [
		'login' => $kpLogin, 
		'pass' => $kpPassword, 
		'mem' => 'on'
	],
	'auth' => 'войти на сайт'];
$client = new Client(['base_url' => 'http://www.kinopoisk.ru']);
$requests = [
	$client->createRequest('POST', '/login/', ['body' => $postData, 'cookies' => true]),
	$client->createRequest('GET', '/film/'.$id.'/', ['cookies' => true]),
];
//$results = Pool::batch($client, $requests, ['header' => ['User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36']]);
......

Pool не делает запросы по очереди, для очередей вроде как Mock, но как его использовать не могу найти. Еще важный нюанс, куки должны переноситься из запроса в запрос. В первом запросе идет авторизация, последующие используют эти куки для открытия страниц.
  • Вопрос задан
  • 3472 просмотра
Подписаться 4 Оценить 7 комментариев
Решения вопроса 1
@faragly Автор вопроса
Итак, сам спросил, сам отвечаю... После долгого изучения исходников guzzle и тестов требуемый результат был достигнут следующим кодом:
добавляет в опции future => true и вместо send() используем wait()
$client->post('/login/', ['body' => $postData, 'cookies' => true, 'future' => true, 'allow_redirects' => false])->wait();

а чтобы куки брались из этого запроса достаточно создать следующий запрос с cookie => true
$request = $client->createRequest('GET', "/film/$id/", ['cookies' => true]);
$response = $client->send($request);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы