[gull] requête http avec perl

magnus anderssen magnus at magooweb.com
Wed Jun 8 21:15:04 CEST 2005


Bonjour,

marquis at altern.org wrote:

>Bonjour,
>j'aimerais faire un petit script perl qui commande une page web;
>or ça marche pas...
>  
>
chez moi ça marche , c'est juste un peu lent (~17 secondes) car le 
serveur attend d'autre requête.

En fait, voici, à mon avis, ce qui ce passe:

1. la socket est ouverte,
2. on envoie la requête au serveur,
3. le serveur répond mais ne ferme pas la connexion,
4. lorsque le serveur ferme la socket, le script affiche le résultat car 
le script attend qu'il n'y ait plus rien à afficher pour rendre la main.

La solution est de changer le "Connection: Keepalive" en "Connection: 
Close".

--
Il est vraiment plus simple d'utiliser LWP.
 
En 30 min, sans en avoir jamais fait avant, je pouvais envoyer des SMS 
au travers d'une interface web d'un de nos amis les opérateurs 
téléphoniques depuis la ligne de commande :-)
Vive LWP et Livehttpheaders.

Bonne fin de soirée,

Magnus

>voici le code (j'ai sniffe avec ethereal la communication pour savoir
>la forme exacte de la requete http et je copie le tout dans $req;
>la ligne "my $req=..." est une seule ligne dans le script mais j'ajoute
>des sauts de ligne ici pour lisibilite) :
>-------------------------------------------
>#!/usr/bin/perl
>use strict;
>use warnings;
>
>use IO::Socket;
>
>my $sock = new IO::Socket::INET(
>	PeerAddr => 'www.edicom.ch',
>	PeerPort=>80,
>	Proto => "tcp");
>die "Could not create socket\n" unless $sock;
>my $req = "GET / HTTP/1.1\r\n
>Connection: Keep-Alive\r\n
>Pragma: no-cache\r\n
>Cache-control: no-cache\r\n
>Accept: text/*, image/jpeg, image/png, image/*, */*\r\n
>Accept-Encoding: x-gzip, x-deflate, gzip, deflate, identity\r\n
>Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5\r\n
>Accept-Language: en, US\r\n
>Host: www.edicom.ch\r\n
>Cookie: CP=null*; CFID=971123;OKEN=67014803\r\n\r\n";
>
>
>print $sock $req;
>
>print <$sock>;
>
>close ($sock);
>----------------------------------------------------
>
>ce qui se passe c'est que le script ne revient jamais. Je dois
>faire CTRL-C.
>
>Si je fais juste "GET /\r\n\r\n", ou "GET / HTTP/1.0\r\n\r\n"
>j'obtient systématiquement (pas seulement avec edicom.ch, donc
>c'est envoyé par un routeur?) un
>400 "bad request".
>Et si je fais :
>GET / HTTP/1.0\r\n
>Host: www.edicom.ch\r\n\r\n
>alors là ça se bloque (CTRL-C).
>
>Tout ça marche contre le serveur local.
>
>Je comprends pas pourquoi avec perl la _meme_ requete (cf. ethereal) ne
>marche pas.
>Si quelqu'un a une idée, merci d'avance!
>
>Samuel
>
>
>
>
>_______________________________________________
>gull mailing list
>gull at lists.alphanet.ch
>http://lists.alphanet.ch/mailman/listinfo/gull
>  
>




More information about the gull mailing list