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

Web Perl Discussion :

Téléchargement de fichiers avec la méthode GET


Sujet :

Web Perl

  1. #1
    Membre du Club
    Profil pro
    Développeur Full Stack
    Inscrit en
    Novembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Novembre 2007
    Messages : 101
    Points : 52
    Points
    52
    Par défaut Téléchargement de fichiers avec la méthode GET
    Bonjour à tous,

    Je suis parvenu en utilisant le module UserAgent à m'identifier sur une page web et à rappatrier le contenu de la page sur mon disque.
    Mais je voudrais aller un peu plus loin. Après avoir parsé le code HTML et identifié les fichiers ressources utilisés par la page web, je souhaiterai télécharger une partie de ces fichiers ressources (gif, bmp, png, css, ...) en utilisant la méthode GET à la suite de l'identification.
    Si ça ne pose pas de problème avec les fichiers de type texte, en faisant un "print LOCAL $response->content" par exemple, en revanche je suis bloqué pour les autres types de fichiers (binaires, etc...).
    Avec le code ci-dessous, j'ai apparemment réussi à copier un fichier gif sur mon disque, sauf que lorsque je le visualise il ne correspond pas à une ressource de la page et l'image semble incomplète, bien que le fichier s'ouvre dans l'explorateur XP.

    Ma question se résume donc à "Comment copier un fichier quelconque situé sur un serveur web, sur mon disque dur, en utilisant la méthode GET ?"

    Merci d'avance à tous ceux qui voudrons bien m'aider.

    Krys006


    use strict;
    use LWP::UserAgent;

    # Initialisation des variables pour l'autentification
    my ($login, $mdp, $url, $reponse1, $reponse2, $form);
    $login = 'mon_identifiant';
    $mdp = 'mon_mot_de_passe';
    $url = 'http://www.adresse_site_web';

    # Initialisation de l'agent
    my $ua = LWP::UserAgent->new(
    agent => 'Mozilla/5.0 (compatible; MISE 6.0)' );

    # Chemin relatif du fichier à télécharger
    my $fichier_a_telecharger = "/Rep_Images/Image.gif";

    # Chemin du fichier à télécharger sur le serveur
    my $chem_src ="http://www.adresse_site_web".$fichier_a_telecharger;

    # Dans le but d'enregistrer le fichier sur mon disque dur
    my $chem_local = ".".$fichiers_a_telecharger;

    # Il faut peur-être ajouter un protocole pour télécharger les fichiers ressources ?
    $ua->protocols_allowed( [ 'http', 'https', 'file']);

    my $req_src = HTTP::Request->new( GET => $chem_src);

    # Le UserAgent renvoit un objet HTTP::Response
    my $rep_src = $ua->request($req_src);

    open(LOCAL, "> C:\/mon_chemin_local\/Image.gif");
    print LOCAL $rep_src->content;
    close(LOCAL);

  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
    Primo : On ne poste pas sur ce forum mais uniquement sur l'un des sous forums, je te déplace dans le forum Web, mais évite à l'avenir.

    Secundo : Quand tu mets du code dans tes messages, mets le dans des balises code (bouton # de l'interface de présentation du forum), sinon on perd l'indentation et ça devient illisible...

    Tertio : Quand on ouvre un fichier on peut l'ouvrir en mode binaire ou en mode texte (mode par défaut) et si on essaie d'écrire des données binaires en mode texte elles sont corrompus à l'arrivée... Autrement dit, soit tu as un Perl récent et tu peux par exemple faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    open my($local_file), '>:raw', "C:/mon_chemin_local/Image.gif"
      or die "Can't open : $!\n";
    print {$local_file} $rep_src->content;
    close $local_file;
    Soit tu as un Perl plus ancien et la méthode sera plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    open(LOCAL, "> C:/mon_chemin_local/Image.gif")
      or die "Can't open : $!\n";
    binmode(LOCAL);
    print LOCAL $rep_src->content;
    close(LOCAL);
    --
    Jedaï

  3. #3
    Membre du Club
    Profil pro
    Développeur Full Stack
    Inscrit en
    Novembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Novembre 2007
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    Merci de répondre aussi rapidement et désolé pour les erreurrs de débutant, je ferai attention prochainement. Je vais essayer de mettre en oeuvre le tertio.

    Merci encore.

  4. #4
    Membre du Club
    Profil pro
    Développeur Full Stack
    Inscrit en
    Novembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Novembre 2007
    Messages : 101
    Points : 52
    Points
    52
    Par défaut ça marche
    Je viens seulement maintenant (faute de temps !) d'expérimenter la solution perl récent, ça marche très bien. Effectivement, la solution consiste à ouvrir un nouveau fichier en mode binaire et à y copier le contenu de la reponse.

    Encore merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/02/2007, 22h39
  2. [jdic]Ouvrir un fichier avec la méthode Desktop
    Par Bloodscalp dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/10/2006, 11h29
  3. Plusieurs formulaires dans un fichier avec plusieurs méthodes post
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2006, 15h04
  4. Téléchargement de fichier avec un espace
    Par nicotine002 dans le forum Langage
    Réponses: 3
    Dernier message: 06/08/2006, 19h25
  5. Pb de suppression d'un fichier avec la méthode File.delete()
    Par benzing dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/01/2006, 15h48

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