in reply to Problem calling WWW::Mechanize redirect_ok

You're not supposed to call redirect_ok() at all. It's an internal callback

If you want to force a redirects all the time, you should probably override the redirect_ok() method in your own subclass of WWW::Mechanize (though it should already do the right thing).

Also check the LWP::UserAgent->new() options.

  • Comment on Re: Problem calling WWW::Mechanize redirect_ok

Replies are listed 'Best First'.
Re^2: Problem calling WWW::Mechanize redirect_ok
by js1 (Monk) on Jan 05, 2006 at 12:59 UTC

    Hi,

    Could you tell me how to override the redirect_ok method please? I'm not too sure how to do this.

    Thanks,

    js1

      Looking at the docs for LWP::UserAgent, we can see:
      $ua->redirect_ok( $prospective_request, $response )
      This method is called by request() before it tries to follow a redirection to the request in $response. This should return a TRUE value if this redirection is permissible. The $prospective_request will be the request to be sent if this method returns TRUE.

      So basically, you want to create a redirect_ok method that always returns a true value. A clean way of doing that is to create a subclass of WWW::Mechanize that overrides WWW::Mechanize's redirect_ok method.

      package WWW::Mechanize::AlwaysRedirect; # this class is a subclass of WWW::Mechanize use base 'WWW::Mechanize'; sub redirect_ok { 1; # always return true. } package main; my $agent = WWW::Mechanize::AlwaysRedirect->new(); # proceed as per usual with this $agent instead of the one # in your original code

      You seem to be slightly confused by object-oriented techniques. You should probably take a look at at perltoot and perlmod. There is also the very good "Object Oriented Perl" book by Damian Conway.

        Thanks, that was a really helpful reply, and thanks for the links.

        Unfortunately I still get a 302 Found page in the browser, so there must be something else I need to do to get the script to follow the redirect through. I'll plough on and see if I can find the answer.

        Thanks again!