简体   繁体   中英

Is it possible to read headers using Perl HTTP::Async module?

To optimize my Perl application I need to work with async HTTP requests, so I can handle other operations once the HTTP response is finish. So I believe my only option is to work with HTTP::Async module. This works fine for simple requests, but I need to catch cookie header from one response and send it with next one, so I need to read headers . My code is:

             ...

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

             ...

but it's not working, as it ends with an error Can't call method "header" on an undefined value . Obviously $response is undef . How can I catch headers before $response gets undef ?

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

Is guaranteed not to finish until $response is false. The only false value wait_for_next_response will return is undef . You need to either extract the cookie inside the loop, or cache the last good response inside the loop.

Something like

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

should work, although I'm not sure you need the loop at all. It's hard to tell without a complete program.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM