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 :
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 $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>
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
Partager