Perl + LWP + Cookie

Perl + LWP + Cookie - Perl - Programmation

Marsh Posté le 28-10-2008 à 16:01:57    

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 :
  1. use Data::Dumper;
  2. use HTTP::Request::Common qw(POST);
  3. use LWP::UserAgent;
  4. use HTTP::Cookies;
  5. $ua = LWP::UserAgent->new();
  6. $cookie_jar = HTTP::Cookies->new(
  7.         file => "lwpcookies.txt",
  8.         hide_cookie2 => 1,
  9.         autosave => 1);
  10. $ua->cookie_jar($cookie_jar);


 
Première requête : affichage de la page de login

Code :
  1. $req = HTTP::Request->new(GET => 'http://xxxx.yyyy.net/myccs2/sms_login.aspx?action=login&md=Home');
  2. print "\n\n============================= Request ===========================\n";
  3. print "\n";
  4. print "header => ".$req->headers_as_string();
  5. print "request = ".$req->as_string;
  6. print "\n\n============================= Response ==========================\n";
  7. my $result = $ua->request($req)->as_string;


 
Côté header et requête, j'obtiens ca :

Citation :


============================= Request ===========================
header =>
request = GET http://xxxx.yyyy.net/myccs2/sms_lo [...] mp;md=Home


 
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 :
  1. my $req = POST 'http://xxxx.yyyy.net/myccs2/sms_login.aspx?action=login&md=Home',
  2. [
  3.         '__EVENTTARGET'         => '',
  4.         '__EVENTARGUMENT'       => '',
  5.         '__VIEWSTATE'           => '/wEPDwUKMTE0NTk3NDY0Nw9kFgJmD2QWAgIED2QWAgIFD2QWAgIBDzwrABUBAA8WAh4OXyFVc2VWaWV3U3RhdGVnZBYCZg9kFgJmD2QWAmYPZBYCZg9kFgJmD2QWAgICD2QWAgIBD2QWAmYPZBYCAgcPPCsABQEADxYCHwBnZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFD2N0bDAwJHJwJHBoMyR0bQUQY3RsMDAkcGg0JHJwbSRzbQ==',
  6.         'ctl00_rp_ph3_tmSI'     => '',
  7.         'ctl00$ph5$rp$Username' => 'monlogin',
  8.         'ctl00$ph5$rp$Password' => 'monpasswd',
  9.         '__CALLBACKID'          => 'ctl00$ph5$rp$callback',
  10.         '__CALLBACKPARAM'       => 'undefined'
  11. ];
  12. $cookie_jar->add_cookie_header($req);
  13. print "\n\n============================= Request ===========================\n";
  14. print "header => ".$req->headers_as_string();
  15. print "\n";
  16. 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 :
  1. $req = HTTP::Request->new(GET => 'http://xxxx.yyyy.net/myccs2/sms_outlook.aspx');
  2. $req->referer('http://xxxx.yyyy.net/myccs2/sms_login.aspx?action=login&md=Home');
  3. $cookie_jar->add_cookie_header($req);
  4. print "\n\n============================= Request ===========================\n";
  5. print "header => ".$req->headers_as_string();
  6. print "request = ".$req->as_string;


 
La requête semble bonne :

Citation :


============================= Request ===========================
header = Cookie: ASP.NET_SessionId=sbncklabld0rkb45eibeamzf
 
request = GET http://xxxx.yyyy.net/myccs2/sms_outlook.aspx
Referer: http://xxxx.yyyy.net/myccs2/sms_lo [...] in&md=Home
Cookie: ASP.NET_SessionId=sbncklabld0rkb45eibeamzf


 
Sensiblement pareil que la requête faite par JMeter :

Citation :


GET http://xxxx.yyyy.net/myccs2/sms_outlook.aspx
 
Cookie Data:
ASP.NET_SessionId=pbe2czqeluywyo45wdp33z45


 
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

Reply

Marsh Posté le 28-10-2008 à 16:01:57   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed