Guzzle: изменение параметров запроса в генераторе пула

У меня есть следующий код:

$generator = function() use ($headers) {
   while ($request = array_shift($this->requests)) {
      yield 'id_' . $request['id'] => new Request('GET', $request['url'], $headers);
   }
}

Однако я хотел бы добавить некоторые настраиваемые параметры запроса, такие как прокси-сервер и настраиваемый тайм-аут. Насколько я знаю, их можно установить только тогда, когда клиент действительно отправляет;

   $this->client->send($r, ['proxy' => $proxy, 'connect_timeout' => 10]);

Когда я настраиваю генератор следующим образом:

   $r = new Request('GET', $request['url'], $headers);

   yield 'id_' . $request['id'] => $this->client->send($r, ['proxy' => $proxy, 'connect_timeout' => 10]);

Код больше не работает, потому что он ожидает RequestInterface.

Итак, как я могу вместо этого установить прокси в генераторе пула? Разве это невозможно?


person Community    schedule 18.04.2017    source источник


Ответы (1)


Генератор может возвращать либо RequestInterface, либо PromiseInterface.

Таким образом, вы можете выполнить «полный» запрос, просто сделайте это асинхронно, чтобы немедленно получить обещание и передать его в пул.

$generator = function () use ($hreaders) {
    while ($request = array_shift($this->requests)) {
        yield 'id_' . $request['id'] => $this->client->sendAsync('GET', $request['url'], [
            // Your options here.
        ]);
    }
};
person Alexey Shokov    schedule 19.04.2017