要优化我的 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);
...
但它无效,因为它以错误结束无法调用方法"标头"在未定义的值。显然$response
是undef
。如何在$response
获取undef
之前抓住标题?
答案 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();
}
应该可以工作,虽然我不确定你是否需要循环。没有完整的程序就很难说清楚。