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 :

LWP::UserAgent problème avec requête GET


Sujet :

Modules Perl

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut LWP::UserAgent problème avec requête GET
    Bonjour,

    c’est la 1ère fois que j’ai à faire de la programmation Web et je me heurte à un problème (code retour 404) lors d’une requête GET en utilisant le module LWP::UserAgent.

    J’ai déjà écrit un premier script utilisant la méthode POST qui fonctionne.
    Le principe est de s'authentifier et de récupérer un jeton avec une requête POST, et ensuite utiliser ce jeton dans la requête suivante pour déposer un fichier (POST).

    Le second script qui me pose problème suit le même principe, authentification et récupération du jeton (POST), je dois ensuite consulter les éventuels retours du fichier que j’ai déposé dans le premier script, soit par id flux (identifiant de mon fichier déposé) soit par plage horaire en utilisant une requête de type GET.

    Les requêtes fonctionnelles du premier script sont ainsi faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $req2 = HTTP::Request->new(POST => $url_depot );
    $req2->header( 'POST'             => '/deposer-pasrau/1.0/ HTTP/1.1');
    $req2->header( 'Host'             => 'pasrau-ws.net-entreprises.fr');
    $req2->header( 'Authorization'    => "$auth_depot");
    $req2->header( 'User-Agent'       => "$agent");
    $req2->header( 'Content-Type'     => 'text/plain');
    $req2->content( "$content" );
    my $response2 = $ua->request($req2);
    La requête GET du second script posant problème est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $req2 = HTTP::Request->new(GET => $url_consultation );
    $req2->header( 'Host'             => 'edit-pasrau-ws.net-entreprises.fr');
    $req2->header( 'Authorization'    => "$auth_consultation");
    $req2->header( 'User-Agent'       => "$agent");
     
    # consultations par id_flux ou par plage horaire KO
    $req2->header( 'GET'              => '/lister-retours-flux/1.0/' . $id_flux . ' HTTP/1.1');
    #$req2->header( 'GET'              => '/lister-retours-declarant/1.0/' . '20170712120000' . ' HTTP/1.1');
    L’administration vers laquelle j’envoie ces requêtes me dit qu’elle reçoit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lister-retours-flux/1.0/
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lister-retours-flux/1.0/123456789 HTTP/1.1
    Je pense que je forme mal le contenu de mon entête GET, mais je sèche complètement sur le sujet.

    Merci pour votre aide

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $req2 = HTTP::Request->new(GET => $url_consultation );
    $req2->header( 'Host'             => 'edit-pasrau-ws.net-entreprises.fr');
    #etc
    $req2->header( 'GET'              => '/lister-retours-flux/1.0/' . $id_flux . ' HTTP/1.1');
    Je reste un peu perplexe de par ces lignes... Je m'en doute que le champ 'GET' dans le 'header' soit standard ou qu'il s'écrive de cette façon, et même doute pour 'POST', d'ailleurs. En tout cas, concrètement, quelles sont des valeurs de $url_consultation, $id_flux, pas nécessairement leur vraie valeur pour la concerne de sécurité, mais il faut présenter des parties de leur valeur si elles contiennent le 'host edit-pasrau-ws.net-entreprises.fr' ou le '/lister-retours-flux/1.0/'... pour se faire une idée plus sûr comment corriger l'écriture de ces lignes.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut
    Nous avons réussi hier à faire fonctionner la requête en utilisant le code suivant.
    $url_consultation ne contient plus que la racine du site cible
    $req_str a été tronquée et ne contient plus ' HTTP/1.1' et cela fonctionne, par contre, nous n'avons pas d'explication.
    Il semblerait que HTTP/1.1 ne soit pas obligatoire et que le serveur analyse mal nos entêtes lors de cette requête GET ou alors nous nous y prenons mal !

    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
     
    my $url_consultation  = 'https://edit-pasrau-ws.net-entreprises.fr';
    my $auth_consultation = 'PASRAULogin jeton=' . $jeton;
     
    my @headers = (
       'User-Agent' => $agent,
       'Host' => 'edit-pasrau-ws.net-entreprises.fr',
       'Authorization' => $auth_consultation,
       'Content-Encoding' => 'gzip',
    );
     
    # consultation par id_flux
    my @id_flux = 'xyz';
     
    my $req_str = '/lister-retours-flux/1.0/' . $_; # OK
    #my $req_str = '/lister-retours-flux/1.0/' . $id_flux . ' HTTP/1.1'; # KO
     
    my $uri = $url_consultation .$req_str;
    $response = $ua->get($uri, @headers);

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si vous voulez garder l'aproche du premier code (et bien-entendu de quelle façon de aproche n'a qu'une importance marginale), vous pouvez faire comme ça en gros:
    Code perl : 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
    #use URI::URL;
     
    #my $jeton='...';
    my $auth_consultation = 'PASRAULogin jeton=' . $jeton;
    #my $agent='...';
     
    my $url_consultation='https://edit-pasrau-ws.net-entreprises.fr';
    my $id_flux='xyz';
    my $req_str='/lister-retours-flux/1.0/'.$id_flux;
     
    my $url_abs=$url_consultation.$req_str;
     
    my $req2=HTTP::Request->new(GET=>$url_abs);
     
    $req2->protocol('HTTP/1.1');
     
    #my $url=new URI::URL $url_consultation;    #si vous voulez
    #my$host=$url->host;
     
    my $host='edit-pasrau-ws.net-entreprises.fr';
     
    $req2->header( 'Host'=>$host);
    $req2->header( 'Authorization'=>$auth_consultation);
    $req2->header( 'User-Agent'=>$agent);
    #etc etc
    print $req2->as_string;    #pour visualiser
     
    #my $ua=LWP::UserAgent->new(...);
    #etc etc
    my $response=$ua->request($req2);
    Dans la sortie de print $req2->as_string, on verra probablement qu'un formatage avec HTTP/1.1 bien en place aussi. Mais ça ne devrait pas trop important pour le fonctionnement pratique.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut
    Merci tsuji, cela fonctionne parfaitement

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

Discussions similaires

  1. [HSQLDB]Problèmes avec requête
    Par Baptiste Wicht dans le forum JDBC
    Réponses: 7
    Dernier message: 06/06/2006, 22h28
  2. Problèmes avec Requêtes d'extraction
    Par NoBru dans le forum Access
    Réponses: 3
    Dernier message: 03/06/2006, 15h25
  3. Problème avec requête ajout
    Par teffal dans le forum Access
    Réponses: 3
    Dernier message: 29/04/2006, 16h41
  4. Problème avec requête ajout
    Par mitnick32 dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 18h02
  5. [VB6] Problème avec requête Update
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/02/2006, 03h40

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