Одновременные HTTP-запросы с goutte

Я знаю, что гут построен на верхушке жреты. Вот пример одновременных HTTP-запросов с жадностью.

<?php
$client->send(array(
    $client->get('http://www.example.com/foo'),
    $client->get('http://www.example.com/baz'),
    $client->get('http://www.example.com/bar')
));

Можно ли одновременно запускать запросы и через goutte?

1 ответ

Решение

Просто быстрый просмотр кода Гутта показывает, что он не поддерживает несколько запросов.

Однако, если вы хотите, вы можете имитировать Goutte, собирая запросы Guzzle и создавая новый объект Symfony\Component\BrowserKit\Response, который Goutte возвращает пользователю для взаимодействия.

Проверьте их функцию createResponse() (которая, к сожалению, защищена) для получения дополнительной информации.

<?php

// Guzzle returns an array of Responses.
$guzzleResponses = $client->send(array(
    $client->get('http://www.example.com/foo'),
    $client->get('http://www.example.com/baz'),
    $client->get('http://www.example.com/bar')
));

// Iterate through all of the guzzle responses.
foreach($guzzleResponses as $guzzleResponse) {
    $goutteObject = new Symfony\Component\BrowserKit\Response(
           $guzzleResponse->getBody(true), 
           $guzzleResponse->getStatusCode(), 
           $guzzleResponse->getHeaders()
    );

    // Do things with $goutteObject as you normally would.
}

Обратите внимание, что когда вы ожидаете, пока ответы соберутся в $ guzzleResponses, он будет ожидать завершения всей асинхронной обработки. Если вы хотите сделать немедленный ответ, посмотрите документацию Guzzle для обработки асинхронных запросов.

Другие вопросы по тегам