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