Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

•Re: LWP::UserAgent subclass to make it follow redirects after POST (like Netscape)

by merlyn (Sage)
on Feb 26, 2002 at 16:15 UTC ( #147611=note: print w/ replies, xml ) Need Help??


in reply to LWP::UserAgent subclass to make it follow redirects after POST (like Netscape)

This is much simpler:

use LWP::UserAgent; sub LWP::UserAgent::redirect_ok { my ($self, $request) = @_; $request->method("GET"),$request->content("") if $request->method eq + "POST"; 1; } ...
You can subclass it if you wish, but just "patching" it fixes program-wide behavior.

-- Randal L. Schwartz, Perl hacker


updated code based on feedback.


Comment on •Re: LWP::UserAgent subclass to make it follow redirects after POST (like Netscape)
Download Code
Re: •Re: LWP::UserAgent subclass to make it follow redirects after POST (like Netscape)
by gregorovius (Friar) on Feb 26, 2002 at 16:29 UTC
    Doing that is not enough. The POST request must be converted into a GET request by the agent and its content removed. That's Netscape's exact behavior, as far as I remember (I wrote this code about a year ago). This snippet in my code does it:
    if($request->method eq 'POST') { $referral->method('GET'); $referral->content(''); }
    Last time I checked UserAgent was not doing this as a result of overriding redirect_ok().

    Update: This is a reply to Merlyn's original post, in which redirect_ok simply returned a 1.

¶Re: •Re: LWP::UserAgent subclass to make it follow redirects after POST (like Netscape)
by Anonymous Monk on Feb 27, 2002 at 00:51 UTC
    The latest LWP::UserAgent allows the behavior of redirect_ok to be overridden using the requests_redirectable method.
    $ua->requests_redirectable( ); # to read $ua->requests_redirectable( \@requests ); # to set This reads or sets the object's list of request names that $ua->redirect_ok(...) will allow redirection for. By default, this is ['GET', 'HEAD'], as per RFC 2068. To change to include 'POST', consider: push @{ $ua->requests_redirectable }, 'POST'; $ua->redirect_ok($prospective_request) This method is called by request() before it tries to follow a redirection to the request in $prospective_request. This should return a true value if this redirection is permissible. The default implementation will return FALSE unless the method is in the object's requests_redirectable list, FALSE if the proposed redirection is to a "file://..." URL, and TRUE otherwise. Subclasses might want to override this. (This method's behavior in previous versions was simply to return TRUE for anything except POST requests).

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://147611]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2014-09-24 03:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (244 votes), past polls