LWP gives 302 Found after update?

Discussion in 'Perl Misc' started by John Bokma, Aug 16, 2005.

  1. John Bokma

    John Bokma Guest

    The following script used to work (Logs in to a PHPbb message board):

    use strict;
    use warnings;

    use LWP::UserAgent;
    use LWP::Debug qw(+);

    my $ua = LWP::UserAgent->new();

    my $response = $ua->post(

    "http://toxicice.com/login.php", [

    username => 'xxxxxxx',
    password => 'xxxx',
    autlogin => 'off',
    redirect => '',
    login => 'Log in',
    ]
    );
    $response->is_success or
    die "Login failed: ", $response->status_line, "\n";

    With an invalid username/password (as above), it gives:

    LWP::UserAgent::new: ()
    LWP::UserAgent::request: ()
    LWP::UserAgent::send_request: POST http://toxici
    LWP::UserAgent::_need_proxy: Not proxied
    LWP::protocol::http::request: ()
    LWP::protocol::collect: read 398 bytes

    .... snipped ...

    LWP::protocol::collect: read 188 bytes
    LWP::UserAgent::request: Simple response: OK

    However, with a valid one it gives:

    LWP::UserAgent::new: ()
    LWP::UserAgent::request: ()
    LWP::UserAgent::send_request: POST http://toxicice.com/login.php
    LWP::UserAgent::_need_proxy: Not proxied
    LWP::protocol::http::request: ()
    LWP::UserAgent::request: Simple response: Found
    Login failed: 302 Found

    $response->content is empty ('').

    I updated some time ago to a more recent version of ActiveState Perl,
    and probably LWP was upgraded as well. OTOH it might be a server thing.

    perl -v
    ....
    This is perl, v5.8.7 built for MSWin32-x86-multi-thread
    ....

    query *
    ....
    libwww-perl [5.803.0.1] Web API for Perl
    ....

    (Complete script is at:
    http://johnbokma.com/perl/phpbb-remote-backup.html )

    ( If you want to test but have no PHP board, mail: phpbb at johnbokma
    dot com, and I arrange a test log in, don't create a test login
    yourself, thanks )

    --
    John Small Perl scripts: http://johnbokma.com/perl/
    Perl programmer available: http://castleamber.com/
    Happy Customers: http://castleamber.com/testimonials.html
     
    John Bokma, Aug 16, 2005
    #1
    1. Advertising

  2. John Bokma

    Brian Wakem Guest

    John Bokma wrote:

    > Login failed: 302 Found
    >
    > $response->content is empty ('').



    The page is printing a Location: header, which tells the browser to go
    somewhere else. LWP::UserAgent does not follow this by default for POSTs.

    Add this:-

    push @{ $ua->requests_redirectable }, 'POST';


    --
    Brian Wakem
    Email: http://homepage.ntlworld.com/b.wakem/myemail.png
     
    Brian Wakem, Aug 16, 2005
    #2
    1. Advertising

  3. John Bokma

    J. Gleixner Guest

    John Bokma wrote:
    > The following script used to work (Logs in to a PHPbb message board):
    >
    > use strict;
    > use warnings;
    >
    > use LWP::UserAgent;
    > use LWP::Debug qw(+);
    >
    > my $ua = LWP::UserAgent->new();
    >
    > my $response = $ua->post(
    >
    > "http://toxicice.com/login.php", [
    >
    > username => 'xxxxxxx',
    > password => 'xxxx',
    > autlogin => 'off',
    > redirect => '',
    > login => 'Log in',
    > ]
    > );
    > $response->is_success or
    > die "Login failed: ", $response->status_line, "\n";


    > However, with a valid one it gives:
    >
    > LWP::UserAgent::new: ()
    > LWP::UserAgent::request: ()
    > LWP::UserAgent::send_request: POST http://toxicice.com/login.php
    > LWP::UserAgent::_need_proxy: Not proxied
    > LWP::protocol::http::request: ()
    > LWP::UserAgent::request: Simple response: Found
    > Login failed: 302 Found


    Just a quick guess... Dumping $ua:

    $VAR1 = bless( {
    'max_redirect' => 7,
    'protocols_forbidden' => undef,
    'no_proxy' => [],
    'protocols_allowed' => undef,
    'use_eval' => 1,
    'requests_redirectable' => [
    'GET',
    'HEAD'
    ],
    'from' => undef,
    'timeout' => 180,
    'agent' => 'libwww-perl/5.803',
    'def_headers' => undef,
    'parse_head' => 1,
    'proxy' => {},
    'max_size' => undef
    }, 'LWP::UserAgent' );

    Since a 302 means a redirect is being requested, and
    'requests_redirectable' only contain GET and HEAD requests, possibly the
    POST isn't seen as being redirecable. Maybe adding 'POST' to that
    attribute, or possibly doing a GET will resolve it.

    WWW::Mechanize might provide a better interface, for interacting with
    the site.
     
    J. Gleixner, Aug 16, 2005
    #3
  4. John Bokma

    John Bokma Guest

    Brian Wakem <> wrote:

    > John Bokma wrote:
    >
    >> Login failed: 302 Found
    >>
    >> $response->content is empty ('').

    >
    >
    > The page is printing a Location: header, which tells the browser to go
    > somewhere else. LWP::UserAgent does not follow this by default for
    > POSTs.
    >
    > Add this:-
    >
    > push @{ $ua->requests_redirectable }, 'POST';


    Aargh, it was even in the manual :-( Many thanks, it fixed my script. I
    have no idea however, why it started to fail in the first place. Was POST
    removed from the list recently? (I can't remember I updated PHPbb
    recently).

    --
    John Small Perl scripts: http://johnbokma.com/perl/
    Perl programmer available: http://castleamber.com/
    Happy Customers: http://castleamber.com/testimonials.html
     
    John Bokma, Aug 16, 2005
    #4
  5. John Bokma

    Brian Wakem Guest

    John Bokma wrote:

    > Aargh, it was even in the manual :-( Many thanks, it fixed my script. I
    > have no idea however, why it started to fail in the first place. Was POST
    > removed from the list recently? (I can't remember I updated PHPbb
    > recently).



    I don't recall POST ever being in that redirectable array. I've only been
    using Perl for 5yrs though.


    --
    Brian Wakem
    Email: http://homepage.ntlworld.com/b.wakem/myemail.png
     
    Brian Wakem, Aug 16, 2005
    #5
  6. John Bokma

    J. Gleixner Guest

    Brian Wakem wrote:
    > John Bokma wrote:
    >
    >
    >>Aargh, it was even in the manual :-( Many thanks, it fixed my script. I
    >>have no idea however, why it started to fail in the first place. Was POST
    >>removed from the list recently? (I can't remember I updated PHPbb
    >>recently).


    More likely is that the Web site changed something.

    >
    > I don't recall POST ever being in that redirectable array. I've only been
    > using Perl for 5yrs though.


    Much older versions used redirect_ok(), which was:

    sub redirect_ok
    {
    # draft-ietf-http-v10-spec-02.ps from www.ics.uci.edu, specify:
    #
    # If the 30[12] status code is received in response to a request using
    # the POST method, the user agent must not automatically redirect the
    # request unless it can be confirmed by the user, since this might
    change
    # the conditions under which the request was issued.

    my($self, $request) = @_;
    return 0 if $request->method eq "POST";
    1;
    }
     
    J. Gleixner, Aug 16, 2005
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. hendy
    Replies:
    0
    Views:
    775
    hendy
    Dec 20, 2005
  2. steve

    error 302 Found

    steve, Nov 8, 2003, in forum: HTML
    Replies:
    2
    Views:
    13,115
    Hywel Jenkins
    Nov 8, 2003
  3. Karra
    Replies:
    2
    Views:
    782
    Octavian Rasnita
    Dec 29, 2010
  4. David Morgan
    Replies:
    1
    Views:
    335
    raj chahal
    Feb 24, 2006
  5. IanW

    LWP and 302 redirects

    IanW, Oct 4, 2006, in forum: Perl Misc
    Replies:
    2
    Views:
    375
    J. Gleixner
    Oct 5, 2006
Loading...

Share This Page