我一直在尝试使用 perl Mechanize(WWW::Mechanize)从http响应中获取301/302重定向位置,但是在使用类似的东西从响应中提取它时遇到了问题响应 - >标题等。
任何人都可以帮助从使用301或302重定向的网站的http响应中提取重定向位置吗?
我知道我想要做什么以及如果我有这个重定向位置URL怎么做,因为我之前使用Mechanize做了更复杂的事情,但我只是遇到了获取位置(或任何其他响应)的实际问题来自http响应的字段。
非常感谢您的帮助,非常感谢,CM
答案 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响应代码。