On Wednesday 08 June 2005 18.43, [EMAIL PROTECTED] 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 > [email protected] > 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: [EMAIL PROTECTED] _______________________________________________ gull mailing list [email protected] http://lists.alphanet.ch/mailman/listinfo/gull
