是否可以使用Perl HTTP :: Async模块读取标头?

时间:2012-03-01 20:17:59

标签: perl http cookies asynchronous http-headers

要优化我的 Perl 应用程序,我需要使用异步 HTTP请求,因此一旦HTTP响应完成,我就可以处理其他操作。所以我相信我唯一的选择是使用HTTP::Async模块。这适用于简单的请求,但我需要从一个响应中捕获cookie标头并将其与下一个响应一起发送,因此我需要阅读标题。我的代码是:

             ...

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

             ...

但它无效,因为它以错误结束无法调用方法"标头"在未定义的值。显然$responseundef。如何在$response获取undef之前抓住标题?

1 个答案:

答案 0 :(得分:4)

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();
}

应该可以工作,虽然我不确定你是否需要循环。没有完整的程序就很难说清楚。