如何从http响应获取301/302网站重定向位置并关注它?

时间:2012-08-22 17:47:42

标签: perl redirect mechanize lwp-useragent

我一直在尝试使用 perl Mechanize(WWW::Mechanize从http响应中获取301/302重定向位置,但是在使用类似的东西从响应中提取它时遇到了问题响应 - >标题等。

任何人都可以帮助从使用301或302重定向的网站的http响应中提取重定向位置吗?

我知道我想要做什么以及如果我有这个重定向位置URL怎么做,因为我之前使用Mechanize做了更复杂的事情,但我只是遇到了获取位置(或任何其他响应)的实际问题来自http响应的字段。

非常感谢您的帮助,非常感谢,CM

2 个答案:

答案 0 :(得分:5)

WWW::Mechanize应自动遵循重定向(除非您已告知不要通过requests_redirectable),因此您不需要做任何事情。

编辑:只是为了证明:

DB<4> $mech = WWW::Mechanize->new;

DB<5> $mech->get('http://www.preshweb.co.uk/linkedin');

DB<6> x $mech->uri;
0  URI::http=SCALAR(0x903f990)
  -> 'http://www.linkedin.com/in/bigpresh'

...正如您所看到的,WWW :: Mechanize遵循重定向,最终自动到达目的地。

根据要求更新了另一个示例:

DB<15> $mech = WWW::Mechanize->new;

DB<16> $mech->get('http://jjbsports.com/');

DB<17> x $mech->uri;
0  URI::http=SCALAR(0x90988f0)
 -> 'http://www.jjbsports.com/'
DB<18> x substr $mech->content, 0, 40;
0  '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'
DB<19> x $mech->title;
0  'JJB Sports | Trainers, Clothing, Football Kits, Football Boots, Running'

如您所见,它遵循重定向,$mech->content正在返回页面内容。这有帮助吗?

答案 1 :(得分:1)

如果是重定向,WWW::Mechanize将使用$mech->redirect_ok();request()会使用重定向网址(这是一种LWP方法)。

注意 -

  

WWW :: Mechanize的构造函数将POST推送到代理程序   requests_redirectable list

因此,您无需担心将POST推送到requests_redirectable列表。

如果您想绝对确定该程序正在重定向您的URL并将每个重定向记录在日志文件(或其他内容)中,您可以使用LWP的{​​{1}}和{{1} }'simple_request来检测重定向,就像这样 -

HTTP::Response

is_redirect将检测301和302响应代码。