J'ai un soucis dans l'utilisation de LWP, je ne comprend pas où ca merde.
J'utilise en parallèle JMeter pour "sniffer" et reproduire les dialogues avec le serveur HTTP
Mon code commence "normal" :
Code :
- use Data::Dumper;
- use HTTP::Request::Common qw(POST);
- use LWP::UserAgent;
- use HTTP::Cookies;
- $ua = LWP::UserAgent->new();
- $cookie_jar = HTTP::Cookies->new(
- file => "lwpcookies.txt",
- hide_cookie2 => 1,
- autosave => 1);
- $ua->cookie_jar($cookie_jar);
|
Première requête : affichage de la page de login
Code :
- $req = HTTP::Request->new(GET => 'http://xxxx.yyyy.net/myccs2/sms_login.aspx?action=login&md=Home');
- print "\n\n============================= Request ===========================\n";
- print "\n";
- print "header => ".$req->headers_as_string();
- print "request = ".$req->as_string;
- print "\n\n============================= Response ==========================\n";
- my $result = $ua->request($req)->as_string;
|
Côté header et requête, j'obtiens ca :
Ca me plait car quand je le fais avec JMeter j'ai la même chose :
Cette fois-ci j'envoie un POST pour faire un login avec password associé :
Code :
- my $req = POST 'http://xxxx.yyyy.net/myccs2/sms_login.aspx?action=login&md=Home',
- [
- '__EVENTTARGET' => '',
- '__EVENTARGUMENT' => '',
- '__VIEWSTATE' => '/wEPDwUKMTE0NTk3NDY0Nw9kFgJmD2QWAgIED2QWAgIFD2QWAgIBDzwrABUBAA8WAh4OXyFVc2VWaWV3U3RhdGVnZBYCZg9kFgJmD2QWAmYPZBYCZg9kFgJmD2QWAgICD2QWAgIBD2QWAmYPZBYCAgcPPCsABQEADxYCHwBnZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFD2N0bDAwJHJwJHBoMyR0bQUQY3RsMDAkcGg0JHJwbSRzbQ==',
- 'ctl00_rp_ph3_tmSI' => '',
- 'ctl00$ph5$rp$Username' => 'monlogin',
- 'ctl00$ph5$rp$Password' => 'monpasswd',
- '__CALLBACKID' => 'ctl00$ph5$rp$callback',
- '__CALLBACKPARAM' => 'undefined'
- ];
- $cookie_jar->add_cookie_header($req);
- print "\n\n============================= Request ===========================\n";
- print "header => ".$req->headers_as_string();
- print "\n";
- print "request = ".$req->as_string;
|
Côté requête j'obtiens ca :
Citation :
============================= Request ===========================
header => Content-Length: 476
Content-Type: application/x-www-form-urlencoded
Cookie: ASP.NET_SessionId=sbncklabld0rkb45eibeamzf
request = POST http://xxxx.yyyy.net/myccs2/sms_lo [...] in&md=Home
Content-Length: 476
Content-Type: application/x-www-form-urlencoded
Cookie: ASP.NET_SessionId=sbncklabld0rkb45eibeamzf
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKMTE0NTk3NDY0Nw9kFgJmD2QWAgIED2QWAgIFD2QWAgIBDzwrABUBAA8WAh4OXyFVc2VWaWV3U3RhdGVnZBYCZg9kFgJmD2QWAmYPZBYCZg9kFgJmD2QWAgICD2QWAgIBD2QWAmYPZBYCAgcPPCsABQEADxYCHwBnZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFD2N0bDAwJHJwJHBoMyR0bQUQY3RsMDAkcGg0JHJwbSRzbQ%3D%3D&ctl00_rp_ph3_tmSI=&ctl00%24ph5%24rp%24Username=monlogin&ctl00%24ph5%24rp%24Password=monpasswd&__CALLBACKID=ctl00%24ph5%24rp%24callback&__CALLBACKPARAM=undefined
|
Le résultat est bon et j'obtiens ce qu'il faut
Ce qui est sensiblement identique que la requête faite avec JMeter. On remarque que la seule chose qui diffère est la valeur du cookie utilisée pour la session :
Citation :
POST http://xxxx.yyyy.net/myccs2/sms_lo [...] in&md=Home
POST data:
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTg1NTMwNzk2NA9kFgJmD2QWAgIED2QWAgIFD2QWAgIBDzwrABUBAA8WAh4OXyFVc2VWaWV3U3RhdGVnZBYCZg9kFgJmD2QWAmYPZBYCZg9kFgJmD2QWAgICD2QWAgIBD2QWAmYPZBYCAgMPPCsABQEADxYCHwBnZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFD2N0bDAwJHJwJHBoMyR0bQUQY3RsMDAkcGg0JHJwbSRzbQ%3D%3D&ctl00_rp_ph3_tmSI=&ctl00%24ph5%24rp%24Username=monlogin&ctl00%24ph5%24rp%24Password=monpasswd&__CALLBACKID=ctl00%24ph5%24rp%24callback&__CALLBACKPARAM=undefined
Cookie Data:
ASP.NET_SessionId=pbe2czqeluywyo45wdp33z45
|
Bon et bien maintenant voilà là où ca merde : j'essaie de requêter une page accessible uniquement une fois loggué :
Code :
- $req = HTTP::Request->new(GET => 'http://xxxx.yyyy.net/myccs2/sms_outlook.aspx');
- $req->referer('http://xxxx.yyyy.net/myccs2/sms_login.aspx?action=login&md=Home');
- $cookie_jar->add_cookie_header($req);
- print "\n\n============================= Request ===========================\n";
- print "header => ".$req->headers_as_string();
- print "request = ".$req->as_string;
|
La requête semble bonne :
Sensiblement pareil que la requête faite par JMeter :
Avec Jmeter ca passe, mais avec mon script Perl je reviens à la page de login... Alors là je comprends pas, si une âme charitable pouvait me dépanner dans l'utilisation de LWP.. thanks