[gull] requête http avec perl

Martial Guex m.guex at mutech.ch
Fri Jun 10 01:31:02 CEST 2005


On Wednesday 08 June 2005 18.43, marquis at altern.org wrote:
> Bonjour,
> j'aimerais faire un petit script perl qui commande une page web;
> or ça marche pas...

Je voudrai juste signaler que gérer un dialogue HTTP n'est pas si simple que 
ça. Il peut arriver qu'un serveur demande par exemple une redirection vers 
une autre adresse, il peut également fournir qu'une partie des données, 
retourner un choix d'adresses, demandé des informations sur les cookies 
(RFC2109) etc. La référence est naturellement la RFC2616 
(ftp://ftp.isi.edu/in-notes/rfc2616.txt) pour HTTP/1.1 et la RFC1945 
(ftp://ftp.isi.edu/in-notes/rfc1945.txt). Naturellement l'on peut négliger 
une partie du protocole si le comportement du serveur est prédictible.

>
> 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

-- 
MuTECH, Martial Guex
Rue des Alpes 3
1452 Les Rasses
Switzerland
Phone:+41 (24) 454 46 35
Fax:+41 (24) 454 46 32
Email: m.guex at mutech.ch



More information about the gull mailing list