[gull] requête http avec perl

marquis at altern.org marquis at altern.org
Wed Jun 8 18:31:03 CEST 2005


Bonjour,
j'aimerais faire un petit script perl qui commande une page web;
or ça marche pas...

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







More information about the gull mailing list