Bonjour,
J'utilise le module LWP::Parallel::UserAgent pour récupérer en parallèle des pages web. Je rencontre un problème depuis que j'ai activé l'autorisation des redirections :
1 2 3 4
| my $ua = LWP::Parallel::UserAgent->new();
...
$ua->redirect(1);
$ua->max_redirect(2); |
Lorsque j'initialisais redirect à 0, si le programme tentait de récupérer une page non autorisée (HTTP/1.1 401 Unauthorized), la réponse à cette requête était simplement négative, sans déclencher de die.
Selon la doc Perl, la valeur redirect autorise à la fois les redirections ET les requêtes d'authentification :
$ua->redirect ( $ok )
Changes the default value for permitting Parallel::UserAgent to follow redirects and authentication-requests.
Je pense que c'est ce dernier point qui provoque l'erreur suivante lorsque le programme tente de récupérer une page non autorisée :
[DIE] Usage: $h->header($field, ...) at (eval 17) line 1
Cette erreur arrive à ce stade du programme, après l'enregistrement des requêtes:
my $entries = $ua->wait();
Comment faire pour intercepter l'erreur 401 de manière propre ? Car le problème est que je lance des requêtes parallèlement, du coup si j'ai une série, disons de 5 urls, à récupérer et que la 2nde provoque un die, alors la réponse des 3 suivantes passe à la trappe.
Voici un debug plus verbeux avec l'utilisation du module LWP::Debug :
1 2 3 4 5 6 7
| LWP::Parallel::UserAgent::_perform_read: '0' = read_chunk from LWP::Parallel::UserAgent::Entry=HASH(0x9a11640) (http://url_qui_va_pas.com)
LWP::Parallel::UserAgent::on_return: (http://url_qui_va_pas.com, 401, Unauthorized)
LWP::Parallel::UserAgent::_perform_read: received '1' from on_return
LWP::Parallel::UserAgent::_remove_current_connection: (LWP::Parallel::UserAgent::Entry=HASH(0x9a11640) [http://url_qui_va_pas.com] )
LWP::Parallel::UserAgent::handle_response: -> (LWP::Parallel::UserAgent::Entry=HASH(0x9a11640) [http://url_qui_va_pas.com] )
LWP::Parallel::UserAgent::handle_response: Handling result: Unauthorized
Usage: $h->header($field, ...) at (eval 17) line 1 |
Ce die est résolument violent !
Merci de votre aide.
Partager