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

Modules Perl Discussion :

Module net::http récupérer un fichier


Sujet :

Modules Perl

  1. #1
    Membre régulier Avatar de Olivier.p
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 93
    Points
    93
    Par défaut Module net::http récupérer un fichier
    Bonjour,

    Je cherche à récupérer un fichier via http. J'ai lu la doc net::http mais je ne vois pas comment faire...

    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/perl
    use Net::HTTP;
    print "connection en cours...\n";
    $http = Net::HTTP -> new(Host => "xxx.xxx.xxx.xxx") or die "connection failed ", $@;
    print "connection OK ! :)\n";
    $http -> write_request(GET => "/dossier1/dossier2/fichier.Z", "D:\dl") or die "Get failed ", $@;
    print "Get OK ! :)\n";
    Bon il marche parce qu'en retour j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    connection en cours...
    connection OK ! :)
    Get OK ! :)
    Je pense que Get me dis que le fichier existe puis c'est tout... Comment pourrais je récupérer le fichier fichier.Z à l'adresse xxx.xxx.xxx.xxx"/dossier1/dossier2 et le copier dans le répertoire D:\dl ?

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    N'utilise pas Net::HTTP, c'est un module de relativement bas niveau, mieux vaut utiliser directement LWP, ou même pour les tâches simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
    use strict; use warnings;
     
    use LWP::Simple qw/is_error getstore/;
     
    my $code = getstore('http://www.google.com', 'index_page.html');
     
    if( is_error($code) ) {
      die "Oups...\n";
    }
     
    __END__
    --
    Jedaï

  3. #3
    Membre régulier Avatar de Olivier.p
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 93
    Points
    93
    Par défaut
    Il me retourne l'erreur "Oups..."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
    use strict; use warnings;
     
    use LWP::Simple qw/is_error getstore/;
     
    my $code = getstore('http://xxx.xxx.xxx.xxx/dossier1/dossier2/fichier.Z', 'D:\\dl');
     
    if( is_error($code) ) {
      die "Oups...\n";
    }
     
    __END__
    Par curisoité, quelle est l'utilité du __END__ à la fin ?
    Merci

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Si l'adresse est correcte, ce script devrait s'exécuter sans erreur, lis le code d'erreur pour savoir la cause du problème. L'une des possibilités serait que le serveur refuse une requête venant d'un User-Agent s'identifiant comme LWP, il faudrait alors ajouter une ligne pour changer cet user-agent, par exemple pour celui d'un browser récent.

    Le __END__ signale la fin du script, tout ce que tu pourrais mettre après ce marqueur ne serait pas considéré par l'interpréteur perl et son contenu serait accessible par le handle DATA.

    --
    Jedaï

  5. #5
    Membre régulier Avatar de Olivier.p
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 93
    Points
    93
    Par défaut
    Bonjour Jedai, Bon week end ?

    Pour en revenir à notre sujet ( ). La valeur de $code est 500 est la valeur retournée est "Bad file descriptor".

    Le chemin d'accès est bon. Comme explorateur j'utilise IE 7 pour récupérer mes ficheirs à la main.

    Je n'ai aucune idée de comment modifier mon user-agent. Il est possible que la page web soit protégée contre les scripts (ça serait dommage mais bon...).

    Peux tu me dire comment modifier l'user agent ou bien récupérer mes fichiers ?

    Merci pour le temps que tu consacres à mon problème

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl
    use strict; use warnings;
     
    use LWP::Simple qw/is_error getstore $ua/;
     
    $ua->agent('Mozilla/5.0');
     
    my $code = getstore('http://xxx.xxx.xxx.xxx/dossier1/dossier2/fichier.Z', 'D:\\dl');
     
    if( is_error($code) ) {
      die "Oups...\n";
    }
     
    __END__

  7. #7
    Membre régulier Avatar de Olivier.p
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 93
    Points
    93
    Par défaut
    Super t'es le meilleur

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

Discussions similaires

  1. [Indy 10] Récupérer un fichier en attachement d'une requête HTTP
    Par davidkungfu dans le forum Web & réseau
    Réponses: 0
    Dernier message: 10/04/2008, 22h19
  2. Réponses: 3
    Dernier message: 11/03/2008, 01h14
  3. Récupérer un fichier sur un serveur HTTP
    Par Medivh dans le forum WinDev
    Réponses: 2
    Dernier message: 01/04/2007, 22h28
  4. [C#.NET 2.0] récupérer des fichiers par http
    Par cortex024 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 21/02/2007, 16h26
  5. [ java.net ] récupérer un fichier PDF à partir d'une URL
    Par nico2280 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2005, 11h09

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