IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

ouvrir page web capricieuse


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 37
    Par défaut ouvrir page web capricieuse
    Bonjour à tous,

    Je viens vous demander votre aide car je bloque sur un problème et mes recherches sur internet ne m'ont rien apportées de concluantes.

    Mon code sert simplement à me dire si oui ou non les url placé dans le site.csv existent ou non. Mon fichier csv ne contient en réalité qu'une colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    open (S, "./site1.csv");
    open (FSOR, '> add.csv');
    while (my $ls = <S>) {
    if (head($ls)) {
    $html=get($ls);
    print FSOR $ls . " est valide\n";
    }
    else {
    print FSOR $ls . " n'est pas valide";
    }
    }
    close(S);
    close(FSOR);
    Ce code fonctionne pour la majorité des sites, malheureusement certains site capricieux font bloquer le code à la ligne du .
    Je me permet de vous mettre le lien vers l'un de ces sites.
    http://www.citymat.com/
    Lorsque l'on essaye de l'ouvrir, le navigateur tourne en rond et ne met jamais le message comme quoi l'url spécifiée n'existe pas.

    Si quelqu'un à une idée pour moi, je suis preneur.

    Merci beaucoup

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Peux-tu nous montrer ton programme en entier ?
    Il faudrait que tu spécifies un timeout.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 37
    Par défaut
    Bonjour,

    Donc rechercher un peu qu'est-ce que c'était qu'un timeout (oui je suis débutant en perl) et je suis tombé sur un code mise par Jedai sur ce forum. J'ai essayer de l'adapter au mien. Voici ce que ça donne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/usr/bin/perl -w
    use LWP::Simple;
    use MyTools;
    open (S, "./site1.csv");
    open (FSOR, '> add.csv');
    timeout 5, sub {
    	while (my $ls = <S>) {
    		if (head($ls)) {
    			chomp($ls);
    			print "je traite $ls\n";
    			print FSOR $ls . "existe\n";
    		} else {
    			print FSOR $ls . "n'existe pas\n";
    		}
    	}
    };
    if($@ =~ m/Timed out/) {
      #Je dois lui dire ici qu'il doit passer au $ls suivant
      print "coucou";
    }
    close (S);
    close (FSOR);
    J'ai suivi les conseils de Jedai qui proposait de créer un Mytools.pm donc voici le .pm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/perl -w
    package MyTools;
     
    use base 'Exporter';
    our @EXPORT = qw(timeout);
     
    use Object::Destroyer;
     
    sub timeout {
       my ($delay, $block) = @_;
       eval{
          local $SIG{ALRM} = sub { die "Timed out\n" };
          alarm($delay);
          my $sentry = Object::Destroyer->new( sub {alarm(0)} );
          $block->();
       };
    }
    1;
    Malheureusement le résultat est très aléatoire. Pour certaines pages existantes le programme m'affiche "coucou" (cas ou timeout est appelé) et pour d'autres pages il va "s'arrêter" et ce beaucoup plus longtemps que 5sec.
    J'imagine que j'ai mal utiliser cette gestion du timeout. Si vous pouvez me conseiller quelque chose je vous en serais reconnaissant.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Dis moi si je me trompe.
    Tu souhaites lire ton fichier csv pour tester si toutes les url à l'interieur sont valides (accessibles) ou non.

    Si oui, je pense avoir un programme dans mes fonds de tiroir pour toi.

    Peux-tu nous donner une liste des sites que tu testes ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 37
    Par défaut
    Re,
    Oui c'est cela que je souhaite faire. Tester une liste d'url.
    Je vous met en pièce jointe un .txt (.csv non autorisé) contenant une quarantaine d'adresses.
    (différents clubs de sport)
    Merci
    Fichiers attachés Fichiers attachés

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Voilà !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #!/usr/bin/perl
    use Carp;
    use strict;
    use warnings;
     
    use LWP::UserAgent;
     
    my $fichier_url     = 'site1.csv';
    my $fichier_rapport = 'add.csv';
     
    open my $fh_lec, '<', $fichier_url     or die "Impossible de lire $fichier_url\n$!";
    open my $fh,     '>', $fichier_rapport or die "Impossible d’écrire dans $fichier_rapport\n$!";
     
    while ( my $url = <$fh_lec> ) {
      chomp $url;
     
      if ( my $erreur = test_url($url) ) {
        print {$fh} "$url : $erreur\n";
      }
      else {
        print {$fh} "$url : OK\n";
      }
    }
     
    sub test_url {
      my $url = shift;
     
      # Temps au delà du quel nous considérons que le site est injoignable
      my $timeout = 10;
     
      my $ua = LWP::UserAgent->new;
      $ua->timeout($timeout);
      $ua->env_proxy;
     
      my $reponse = $ua->get($url);
     
      # Si la réponse est incorrect, récupérons le message d'erreur
      if ( !$reponse->is_success ) {
        return $reponse->status_line;
      }
     
      return;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir page web en ligne de commande
    Par djibril dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 07/09/2009, 17h01
  2. [AC-2007] Ouvrir page web dans formulaire
    Par mowegan dans le forum IHM
    Réponses: 1
    Dernier message: 15/04/2009, 20h33
  3. Autorisations -> ouvrir page web, et seulement listes autorisées
    Par cantanna1988 dans le forum SharePoint
    Réponses: 2
    Dernier message: 02/03/2009, 20h08
  4. Ouvrir page web à partir d'une application
    Par lepirate dans le forum WinDev
    Réponses: 3
    Dernier message: 22/06/2008, 23h36
  5. [vb6]ouvrir page web en
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 06/10/2007, 00h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo