Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

LWP gives 302 Found after update?

227 views
Skip to first unread message

John Bokma

unread,
Aug 16, 2005, 2:05:50 PM8/16/05
to
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

Brian Wakem

unread,
Aug 16, 2005, 2:43:37 PM8/16/05
to
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

J. Gleixner

unread,
Aug 16, 2005, 2:48:33 PM8/16/05
to
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.

John Bokma

unread,
Aug 16, 2005, 2:50:52 PM8/16/05
to
Brian Wakem <n...@email.com> 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).

Brian Wakem

unread,
Aug 16, 2005, 2:56:55 PM8/16/05
to
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.

J. Gleixner

unread,
Aug 16, 2005, 3:35:20 PM8/16/05
to
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;
}

0 new messages