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 POST en HTTPS


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 POST en HTTPS
    Bonjour,

    nous utilisons LWP::UserAgent pour nous connecter via un proxy à un serveur HTTPS afin d'y déposer (méthode POST) des données.

    Une première requête d'authentification nous renvoie un jeton à utiliser pour l'envoi des données (la 2nde requête) et semble bien fonctionner.

    Le serveur nous répond à cette seconde requête 'Jeton invalide ou manquant' et nous n'arrivons pas (malgré de nombreux essais) à tracer l'origine du problème.
    Les specs du serveur de destination précisent que le jeton est encodé en BASE64 : nous avons essayé de le décoder avec le module MIME::Base 64 et de le réencoder dans cette même base, sans plus de succès. Le script est encodé en UTF-8 sur un serveur RHEL 6.6.

    Dans la réponse de la seconde requête, nous avons 'Missing Authenticate header', mais ne savons pas comment l'interpréter ni y remédier.
    Quelques recherches sur le net évoquent des problèmes au niveau du proxy, mais les gens du réseau ne voient rien de bloqué (tout est marqué 'Allow').

    Nous sommes un peu sec car c'est la 1ère fois que nous avons à faire ce genre de traitement.
    Si quelqu'un a une idée sur les éventuelles pistes de recherche.

    Merci

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Code :
    #!/usr/bin/perl
    use strict;
    use warnings;
    use LWP::UserAgent;
    use Data::Dumper;
    use feature 'say';
     
     
    BEGIN {
        $ENV{HTTP_PROXY}  = 'http://10.0.3.22:3128';
        $ENV{HTTPS_PROXY} = 'http://10.0.3.22:3128';
        $ENV{HTTPS_DEBUG} = 0;
        $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0
    }
     
     
    # Authentification
    my $url_auth = 'https://xxxxx/';
    my $auth_req = <<'END_REQ0';
    <identifiants>
         <siret>xxxxx</siret>
         <nom>xxxxx</nom>
         <prenom>xxxxx</prenom>
         <motdepasse>xxxx</motdepasse>
         <service>xxx</service>
    </identifiants>
    END_REQ0
     
     
    my $ua = LWP::UserAgent->new ( env_proxy => 1,
                                   timeout => 10,
                                   agent => 'xxxx',
                                   protocols_allowed => [ 'http', 'https' ],
                                 );
    my $agent = 'xxxx ' . $ua->agent;
     
    my $req = HTTP::Request->new(POST => $url_auth );
     
    $req->header( 'POST'           => '/authentifier/1.0/ HTTP/1.1');
    $req->header( 'Host'           => 'xxxxxxxxxxxx);
    $req->header( 'User-Agent'     => "$agent");
    $req->header( 'Content-Type'   => 'application/xml');
    $req->content($auth_req);
     
    my $response = $ua->request($req);
    my $jeton  = $response->decoded_content;
    chomp ( $jeton );
     
    [...]
    my $auth_depot = 'xxxx jeton=' . $jeton;
     
    my $req2 = HTTP::Request->new(POST => $url_depot );
    $req2->header( 'POST'             => '/xxxxxx/1.0/ HTTP/1.1');
    $req2->header( 'Host'             => 'xxxxxxx');
    $req2->header( 'Authorization'    => "$auth_depot");
    $req2->header( 'User-Agent'       => "$agent");
    $req2->header( 'Content-Type'     => 'text/plain');
    $req2->header( 'Content-encoding' => 'gzip');
    $req2->content("$xxxxx");

    La réponse à la première requête :
    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
     
    $VAR1 = \bless( {
                       '_protocol' => 'HTTP/1.1',
                       '_content' => 'AAAAAwAAAMttRHkpiRTnl6WS4QkRlHZuuQPSRxpXhuuBCiAgmRkm8tXungiVd2Mnoz8x3gqZ83wr0JBiyBwudrUC0VyxBVaja6jkU3ILh5YQu7OKERdUnAye+WGMo/lMxGf83GMO+8ybpWfH2sW/ZfxdowXDdv93CKvsyk7lvt6mpElU7ef2aXfFXvgxmmKn38mYrIFvclrZKet5QsBLYaZZrvMXLL0T+xEiU3YJb3UqDWJQZ95Kc3uRebyYZ4U8CLlOZo8lbCEEOTDVHP+PSU4SCMhHP+/bFgsJq65I1D3ciy8GYA+5WN98N51sAWZH27oug47EJ4cygSTlrBkmkdRDtJ258mIjezrTS25x3PSoVOiJr3GkdysnnEaH8HxHFstR8o/J/eQDRZuaymdZbY2/3Py2+FMfbpMVJ+5T+tONif9vYAoJerZ/TwPyKkJ1e5LaK1grUyAG5NZWnquRjW4uBw7upX3fNOU87fl3D7oUtAx/vGM4zU7tZ8ljk0Y5fKvTIXzmqlU=',
                       '_rc' => '200',
                       '_headers' => bless( {
                                              'connection' => 'close',
                                              'x-powered-by' => 'Servlet/2.5 JSP/2.1',
                                              'client-response-num' => 1,
                                              'date' => 'Tue, 11 Jul 2017 09:14:54 GMT',
                                              'vary' => 'Accept-Encoding',
                                              'client-peer' => 'xxxxx:3128',
                                              'content-length' => '524',
                                              '::std_case' => {
                                                                'client-date' => 'Client-Date',
                                                                'x-powered-by' => 'X-Powered-By',
                                                                'client-response-num' => 'Client-Response-Num',
                                                                'client-peer' => 'Client-Peer'
                                                              },
                                              'client-date' => 'Tue, 11 Jul 2017 09:14:54 GMT',
                                              'content-type' => 'application/octet-stream',
                                              'server' => 'Apache',
                                              'expires' => 'Tue, 11 Jul 2017 11:14:54 GMT'
                                            }, 'HTTP::Headers' ),
                       '_msg' => 'OK',
                       '_request' => bless( {
                                              '_content' => '<identifiants>
         <siret>xxxx</siret>
         <nom>xxx</nom>
         <prenom>xxx</prenom>
         <motdepasse>xxxx</motdepasse>
         <service>xx</service>
    </identifiants>
    La réponse à la seconde requête :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    $VAR1 = \bless( {
                       '_protocol' => 'HTTP/1.1',
                       '_content' => 'Jeton manquant ou invalide',
                       '_rc' => '401',
                       '_headers' => bless( {
                                              'connection' => 'close',
                                              'set-cookie' => 'JSESSIONID=B3T7ZkXPQ8GtZ91J1p6syB4BQ1DxxKwKTlps3jNDkhqyFTvZT1n9!-1810388671; path=/; HttpOnly',
                                              'access-control-allow-origin' => '*',
                                              'date' => 'Tue, 11 Jul 2017 09:14:55 GMT',
                                              'vary' => 'Accept-Encoding',
                                              'client-peer' => '10.0.3.22:3128',
                                              'client-warning' => 'Missing Authenticate header',
                                              'client-date' => 'Tue, 11 Jul 2017 09:14:55 GMT',
                                              'content-type' => 'text/html; charset=UTF-8',
                                              'server' => 'Apache',
                                              'access-control-allow-headers' => 'Authorization',
                                              'x-powered-by' => 'Servlet/2.5 JSP/2.1',
                                              'client-response-num' => 1,
                                              'access-control-allow-methods' => 'POST, GET',
                                              'content-length' => '26',
                                              '::std_case' => {
                                                                'x-powered-by' => 'X-Powered-By',
                                                                'access-control-allow-headers' => 'Access-Control-Allow-Headers',
                                                                'client-response-num' => 'Client-Response-Num',
                                                                'set-cookie' => 'Set-Cookie',
                                                                'access-control-allow-origin' => 'Access-Control-Allow-Origin',
                                                                'access-control-allow-methods' => 'Access-Control-Allow-Methods',
                                                                'client-peer' => 'Client-Peer',
                                                                'client-date' => 'Client-Date',
                                                                'client-warning' => 'Client-Warning'
                                                              }
                                            }, 'HTTP::Headers' ),
                       '_msg' => 'Authorization Required',
                       '_request' => bless( {
                                              '_content' => 'xxxx'
     
    										 [...]
                                              '_uri' => bless( do{\(my $o = 'https://xxxxxx/')}, 'URI::https' ),
                                              '_headers' => bless( {
                                                                     'user-agent' => 'xxxx libwww-perl/6.26',
                                                                     'content-type' => 'text/plain',
                                                                     'content-encoding' => 'gzip',
                                                                     'post' => '/xxxxx/1.0/ HTTP/1.1',
                                                                     'authorization' => 'xxxxxx jeton=AAAAAwAAAMttRHkpiRTnl6WS4QkRlHZuuQPSRxpXhuuBCiAgmRkm8tXungiVd2Mnoz8x3gqZ83wr0JBiyBwudrUC0VyxBVaja6jkU3ILh5YQu7OKERdUnAye+WGMo/lMxGf83GMO+8ybpWfH2sW/ZfxdowXDdv93CKvsyk7lvt6mpElU7ef2aXfFXvgxmmKn38mYrIFvclrZKet5QsBLYaZZrvMXLL0T+xEiU3YJb3UqDWJQZ95Kc3uRebyYZ4U8CLlOZo8lbCEEOTDVHP+PSU4SCMhHP+/bFgsJq65I1D3ciy8GYA+5WN98N51sAWZH27oug47EJ4cygSTlrBkmkdRDtJ258mIjezrTS25x3PSoVOiJr3GkdysnnEaH8HxHFstR8o/J/eQDRZuaymdZbY2/3Py2+FMfbpMVJ+5T+tONif9vYAoJerZ/TwPyKkJ1e5LaK1grUyAG5NZWnquRjW4uBw7upX3fNOU87fl3D7oUtAx/vGM4zU7tZ8ljk0Y5fKvTIXzmqlU=',
                                                                     'host' => 'xxxxxx',
                                                                     '::std_case' => {
                                                                                       'post' => 'POST'
                                                                                     }
                                                                   }, 'HTTP::Headers' ),
                                              '_method' => 'POST',
                                              '_uri_canonical' => ${$VAR1}->{'_request'}->{'_uri'},
                                              'proxy' => bless( do{\(my $o = 'http://xxxxxx:3128')}, 'URI::http' )
                                            }, 'HTTP::Request' )
                     }, 'HTTP::Response' );
     
    Réponse xxxx :
    Jeton manquant ou invalide

  2. #2
    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
    Le problème était situé dans la configuration du serveur cible.
    Après mise à jour de leur côté, tout est fonctionnel.

    Désolé pour le bruit

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/04/2011, 22h42
  2. Besoin d'éclaicissement sur LWP::UserAgent
    Par bluecurve dans le forum Modules
    Réponses: 7
    Dernier message: 25/05/2006, 17h00
  3. problème avec net::http
    Par piotr dans le forum Modules
    Réponses: 3
    Dernier message: 20/03/2006, 10h44
  4. Comment envoyer une requête POST via HTTP ?
    Par pdtor dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2005, 05h54
  5. [XML] comment récupérer un arbre xml posté par http ?
    Par tomperso dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/07/2004, 10h29

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