Salut à tous,
Voilà j'ai un petit problème lorsque j'essaye de récupérer un fichier en http avec le module Net::HTTP. En effet, la méthode read_entity_body se freeze régulièrement (j'imagine qu'elle a du mal à récupérer le contenu distant). J'ai cherché pas mal sur internet et sur le forum, mais je n'ai absolument rien trouvé sur le sujet (suis-je le seul à avoir jamais eu ce problème ?)...
Pour résoudre le problème, j'ai essayé plein de tailles de tampon différentes ... j'ai également essayé d'utiliser Net::HTTP::NB (non bloquant) mais cela ne change rien... Sinon j'avais pensé mettre un timeout sur la fonction et réessayer en cas de dépassement du délai mais je n'ai pas trouvé comment le faire proprement (à part avec des threads mais bon, si je peux éviter...).
Voici grosso-modo, l'extrait de code :
Merci d'avance à tous ceux qui m'aiderons à résoudre ce problème !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 my $s = Net::HTTP->new( Host => $self->{host} ); my $encoded = encode_base64("$self->{user}:$self->{password}"); $s->write_request( GET => $self->{url}, 'User-Agent' => "Mozilla/4.0 (Perl 5.8.9)", 'Authorization' => "Basic $encoded"); my ( $code, $mess, %h ) = $s->read_response_headers(); while (1) { my ($buf); # téléchargement du xml my $n = $s->read_entity_body( $buf, $self->{'buf_size'} ); # (...) # traitement last unless $n; }
Partager