Можно ли читать заголовки с помощью модуля Perl HTTP :: Async? - PullRequest
2 голосов
/ 02 марта 2012

Для оптимизации моего Perl приложения мне нужно работать с асинхронными HTTP-запросами, чтобы я мог обрабатывать другие операции после завершения HTTP-ответа.Поэтому я считаю, что мой единственный вариант - работать с HTTP :: Async модулем.Это хорошо работает для простых запросов, но мне нужно перехватить заголовок cookie из одного ответа и отправить его со следующим, поэтому мне нужно прочитать headers .Мой код:

             ...

             $async->add($request);
             while ($response = $async->wait_for_next_response)
             {
               threads->yield(); yield();
             }
             $cookie = $response->header('Set-Cookie');
             $cookie =~ s/;.*$//;
             $request->header('Cookie' => $cookie);

             ...

, но он не работает, поскольку заканчивается ошибкой Невозможно вызвать метод "header" для неопределенного значения .Очевидно, $response - это undef.Как я могу поймать заголовки, прежде чем $response получает undef?

1 Ответ

4 голосов
/ 02 марта 2012
while ($response = $async->wait_for_next_response)
{
  threads->yield(); yield();
}

Гарантируется, что не завершится, пока $response не станет ложным.Единственное ложное значение, которое вернет wait_for_next_response, будет undef.Вам нужно либо извлечь cookie внутри цикла, либо кэшировать последний хороший ответ внутри цикла.

Что-то вроде

my $last_response;
while ($response = $async->wait_for_next_response)
{
  $last_response = $response;
  threads->yield(); yield();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...