Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
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 exploiting the Monastery: (9)
As of 2015-07-05 14:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls