develooper Front page | perl.libwww | Postings from August 2003

Post fails with 302, returns same page

Thread Next
From:
Randall Perry
Date:
August 19, 2003 19:38
Subject:
Post fails with 302, returns same page
Message ID:
BB684419.585DD%rgp@systame.com
Am trying to automate access to a site which allows file upload. The 1st
page is for login. The 2nd page is for file upload, which loads upon
successful login from page 1. Code for these pages is written for .NET and
running on IIS 6 (domain names changed to protect the guilty in code below).

I've used the Perl & LWP book as a guide and done everything I can think of
to post the form for the 1st page (like taking care of cookies, adding
authentic UA headers, adding Referrer) but it keeps spitting back the same
login page with a 302 status code. Login works fine in any browser I try
(IE, Safari, Camino).

Below are details of the login page form, my perl code to access it, and the
response headers for the failed post. I've about exhausted my resources on
this and would appreciate any info on how to make this work.

TIA


----------------------------------------------------------------------------

************************************
The login page form has these fields
************************************

    name = __VIEWSTATE, type = hidden
    UcLogin1:txtUsername, type = text
    UcLogin1:txtPassword, type = text
    UcLogin1:cmdLogin, type = submit

It also sets these cookies:
.AUTHCOOKIE=3A3559513B6D1445231E8DF5BEBA661CE4D7CEEEFEB5FE08C9E025AE37697BFF
F7AC2DB7C411E0043B6447400A5C29A1CD776B2BF2566EB18CB12021218C8C87E76FB226B1DB
A587; path="/"; domain="acme.com"; path_spec; discard; version=0

ASP.NET_SessionId=aol32cirlssfxoedaunelz55; path="/"; domain="acme.com";
path_spec; discard; version=0

ASP.NET_SessionId=1z42nverpm5alkfkryntkk3t; path="/"; domain="www.acme.com";
path_spec; discard; version=0


************
My perl code
************

use LWP::UserAgent;

$browser = LWP::UserAgent->new;

$browser->cookie_jar( {} );            # enable cookies
$response = $browser->get("https://www.acme.com/file/");
$doc = $response->content;
$doc =~ m/name="__VIEWSTATE" value="(.*?)"/;    # grab hidden viewstate form
variable and add to $form_vars
$viewstate = $1;

$https_url = 
'https://acme.com/file/login.aspx?ReturnUrl=%2ffile%2findex.aspx'; # form
action
%form_headers =  (
    'Referer' => 
'https://acme.com/File/login.aspx?ReturnUrl=%2ffile%2findex.aspx',
    'User-Agent' => 'Mozilla/4.76 [en] (Win98; U)',
    'Accept-Language' => 'en-US',
    'Accept-Charset' => 'iso-8859-1,*,utf-8',
    'Accept-Encoding' => 'gzip',
    'Accept' => "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*",
    );
    
push(@$form_vars, '__VIEWSTATE'  => $viewstate);
# hidden var
push(@$form_vars, 'UcLogin1:txtUsername'  => 'uname');
# username
push(@$form_vars, 'UcLogin1:txtPassword'  => 'pword');
# password
push(@$form_vars, 'UcLogin1:cmdLogin'  => 'Login');
# named submit button with value

$response = $browser->post($https_url, $form_vars, %form_headers);
# post login form  
$doc = $response->content;
print $doc;

**************************
Returned headers from post
**************************
'_headers' => HTTP::Headers=HASH(0x9b6d60)
   'cache-control' => 'private'
   'client-date' => 'Wed, 20 Aug 2003 00:29:23 GMT'
   'client-response-num' => 1
   'client-ssl-cert-issuer' => '/C=GB/O=Comodo Limited/OU=Comodo Trust
Network/OU=Terms and Conditions of use:
http://www.comodo.net/repository/OU=(c)2002 Comodo Limited/CN=Comodo Class 3
Security Services CA'
   'client-ssl-cert-subject' =>
'/C=US/2.5.4.17=46615/ST=Florida/L=Orlando/2.5.4.9=ORLANDO/2.5.4.9=3024
FLAMINGO AVE./O=ACME Inc/OU=ACME Inc/OU=InstantSSL Pro/CN=www.acme.com'
   'client-ssl-cipher' => 'RC4-MD5'
   'client-ssl-warning' => 'Peer certificate not verified'
   'content-length' => 2993
   'content-type' => 'text/html; charset=utf-8'
   'date' => 'Wed, 20 Aug 2003 00:29:24 GMT'
   'location' => '/file/index.aspx'
   'microsoftofficewebserver' => '5.0_Pub'
   'server' => 'Microsoft-IIS/6.0'
   'set-cookie' => ARRAY(0x36c2c0)
      0  'ASP.NET_SessionId=aol32cirlssfxoedaunelz55; path=/'
      1  
'.AUTHCOOKIE=3A3559513B6D1445231E8DF5BEBA661CE4D7CEEEFEB5FE08C9E025AE37697BF
FF7AC2DB7C411E0043B6447400A5C29A1CD776B2BF2566EB18CB12021218C8C87E76FB226B1D
BA587; path=/'
   'title' => 'Object moved'
   'x-aspnet-version' => '1.1.4322'
   'x-powered-by' => 'ASP.NET'
'_msg' => 'Found'
'_protocol' => 'HTTP/1.1'
'_rc' => 302
'_request' => HTTP::Request=HASH(0x988a34)
   '_content' => 
'__VIEWSTATE=dDwxNjEzNDcwNTY3Ozs%2BL8uvsmCZLzJf4Is91Q%2FsUSKiZxk%3D&UcLogin1
%3AtxtUsername=tasbill&UcLogin1%3AtxtPassword=tasbill&UcLogin1%3AcmdLogin=Lo
gin'
   '_headers' => HTTP::Headers=HASH(0x98a75c)
      'accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*'
      'accept-charset' => 'iso-8859-1,*,utf-8'
      'accept-encoding' => 'gzip'
      'accept-language' => 'en-US'
      'content-length' => 154
      'content-type' => 'application/x-www-form-urlencoded'
      'referer' => 
'https://acme.com/File/login.aspx?ReturnUrl=%2ffile%2findex.aspx'
      'user-agent' => 'Mozilla/4.76 [en] (Win98; U)'
   '_method' => 'POST'
   '_uri' => URI::https=SCALAR(0x9604b8)
      -> 'https://acme.com/file/login.aspx?ReturnUrl=%2ffile%2findex.aspx'



-- 
Randall Perry
sysTame

Xserve Web Hosting/Co-location
Website Development/Promotion
Mac Consulting/Sales

http://www.systame.com/



Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About