Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1255 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Problème socket et saut de ligne [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème socket et saut de ligne [Résolu]

n°239108
BMenez
Posté le 04-11-2002 à 10:52:32  profilanswer
 

Lorsque je recupère une page depuis le web avec le script suivant, les codes 0D,0A (cr/lf) sont enregistrés dans le fichier resultat.out. Pour les pages web, ce n'est pas genant mais pour les fichiers binaires, ça l'est un peu plus. Est-ce que quelqu'un sait comment supprimer ces 2 octets ?
 
Merci d'avance
 
Voici mon code:

Code :
  1. #!/usr/bin/perl -w
  2. use IO::Socket;
  3. $server = 'www.google.fr';
  4. $port = 80;
  5. open OUTPUT, "+>resultat.out" or die "Impossible de créer le fichier resultat.out";
  6. binmode OUTPUT;
  7. $socket = IO::Socket::INET->new(
  8. Proto => 'tcp',
  9. PeerAddr => $server,
  10. PeerPort => $port,
  11. Timeout => 10,
  12. );
  13. unless($socket) {
  14. die("Could not connect to $server:$port" );
  15. }
  16. $socket->autoflush(1);
  17. print $socket ("GET / HTTP/1.1\nHost: www.google.frnn" );
  18. $off = 1;
  19. while ($line = <$socket> ){
  20. if ($line =~ /^\s*\r\n$/){
  21. $off = 0;
  22. }unless($off){
  23. print OUTPUT $line;
  24. }
  25. }
  26. exit();


Message édité par BMenez le 04-11-2002 à 14:39:40
mood
Publicité
Posté le 04-11-2002 à 10:52:32  profilanswer
 

n°239159
Toucouch
Posté le 04-11-2002 à 12:26:04  profilanswer
 

Voilà un de mes vieux scripts qui devrait marcher:

Code :
  1. # Lecture de l'en-tete de la reponse...
  2. while($reponse=<$socket> )
  3. {
  4.   last if($reponse =~ /^\r$/)
  5. }
  6. # Lecture du corps de la reponse...
  7. while($reponse=<$socket> )
  8.   last if(!($longueur = eval('0+0x'.$reponse)));
  9.   while($longueur>0)
  10.   {
  11.     $reponse = <$socket>;
  12.     if($longueur<0) { chop $reponse; chop $reponse; }
  13.     print OUTPUT $reponse;
  14.     $longueur -= length($reponse);
  15.   }
  16. }


Note que dans ce script, j'ignore complètement le contenu de l'en-tête de la réponse HTTP. Tu peux ajouter un test sur le code de la réponse par exemple (404, etc.).

n°239218
BMenez
Posté le 04-11-2002 à 14:39:23  profilanswer
 

Merci pour ta réponse ;)  
Voilà comment je l'ai réduit, et ça fonctionne ! (Je ne comprends pourtant pas la différence fondamentale avec ce que j'avais fait...)
Merci encore!

Code :
  1. # Lecture de l'en-tete de la reponse...
  2. while($reponse=<$socket> )
  3. {
  4. last if($reponse =~ /^\r$/)
  5. }
  6. while($reponse=<$socket> )
  7. {
  8.    print OUTPUT $reponse;
  9. }

n°239656
Aricoh
gentil mais fo po pousser
Posté le 05-11-2002 à 08:33:16  profilanswer
 

BMenez a écrit a écrit :

Je ne comprends pourtant pas la différence fondamentale avec ce que j'avais fait...



 
Ben la différence cruciale se situe ici :
 
Ton code d'origine :

Code :
  1. if ($line =~ /^\s*\r\n$/){ }


 
Traduction : test si $line commencerait par "\s" (optionnellement), "\r" suivi pour finir de "\n"
 
Le code-solution :

Code :
  1. last if($reponse =~ /^\r$/)


Ici, on ne parle que du "\r", la ligne ne doit contenir QUE le "\r" pour que la condition soit vraie.
 
C'est ton "\n" qui te foutait dedans ...


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Problème socket et saut de ligne [Résolu]

 

Sujets relatifs
Variable Globale? comprend pas... [RESOLU]un petit problème de débutant
problème textarea (entrée d'un smiley à l'emplacement du curseur)Probleme avec la requete MySQL UPDATE
Probleme avec Eclipseopengl probleme (photos inside)
[ JS ] générer un nombre aléatoire et probleme de tableau ( var )probleme avec dev.c++
[PHP] Probleme avec les fonctions[ Prog C ] Probleme avec les includes multiples...
Plus de sujets relatifs à : Problème socket et saut de ligne [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR