perl – 如何使LWP :: UserAgent看起来像另一个浏览器?

前端之家收集整理的这篇文章主要介绍了perl – 如何使LWP :: UserAgent看起来像另一个浏览器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我关于SO的第一篇文章,所以要温柔.我甚至不确定这是否属于这里,但是这里有.

我想访问我的一个个人帐户的一些信息.该网站写得很差,要求我手动输入我想要的信息日期.这确实是一种痛苦.我一直在寻找借口来学习更多Perl所以我认为这将是一个很好的机会.我的计划是编写一个Perl脚本,该脚本将登录到我的帐户并为我查询信息.但是,我很快被卡住了.

my $ua = LWP::UserAgent->new;
my $url = url 'https://account.web.site';
my $res = $ua->request(GET $url);

生成的网页基本上表示我的网络浏览器不受支持.我尝试了许多不同的值

$ua->agent("");

但没有任何事情似乎有效.谷歌围绕建议这种方法,但它也说perl在网站上被用于恶意的原因.网站阻止这种方法吗?我想做什么甚至可能?是否有更合适的不同语言?我正在努力做甚至合法甚至是好主意?也许我应该放弃我的努力.

请注意,为了防止泄露任何私人信息,我在这里写的代码不是我正在使用的确切代码.但我希望这很明显.

编辑:在FireFox中,我禁用了JavaScript和CSS.我没有“不兼容的浏览器”错误登录了.它似乎不是JavaScript问题.

解决方法

通过抓取获取不同的网页

我们必须做出一个假设,如果给出相同的输入,web服务器将返回相同的输出.有了这个假设,我们不可避免地得出结论,我们没有给它相同的输入.在这种情况下有两个浏览器或http客户端:一个为您提供所需结果的浏览器(例如,Firefox,IE,Chrome或Safari),以及未提供您想要结果的浏览器(例如.,LWP,wget或cURL).

首先取消简单的可能性

之前,首先要确保简单的UserAgents是相同的,您可以通过浏览到whatsmyuseragent.com并将其他浏览器的标题中的UserAgent字符串设置为该网站返回的任何内容来执行此操作.您还可以使用Firefox的Web Developer’s Toolbar来禁用CSS,JavaScript,Java和元重定向:这将帮助您通过消除非常简单的内容来追踪问题.

现在尝试复制工作浏览器

现在使用Firefox,您可以使用FireBug来分析发送的REQUEST.您可以在FireBug的NET选项卡下执行此操作,不同的浏览器应该具有可以执行FireBug对FireFox执行操作的工具;但是,如果您不知道相关工具,您仍然可以使用tshark或wireshark,如下所述.重要的是要注意tshark和wireshark将始终更准确,因为它们工作在较低的水平,至少在我的经验中留下较少的错误空间.例如,您会看到浏览器正在进行的元重定向等操作,有时FireBug可能无法跟踪.

了解了第一个有效的Web请求后,请尽力将第二个Web请求设置为第一个Web请求.我的意思是正确设置请求标头和其他请求元素.如果这仍然不起作用,您必须知道第二个浏览器正在做什么来查看错误.

故障排除

为了解决这个问题,我们必须完全理解来自两个浏览器的请求.第二个浏览器通常是tricker,这些浏览器通常是库和非交互式命令行浏览器,它们无法检查请求.如果他们有能力转储请求,您仍然可以选择简单地检查它们.要做到这一点,我建议wireshark and tshark suite.你应该立即警告,因为这些操作在浏览器下面.默认情况下,您将看到实际的网络(IP)数据包和数据链路帧.您可以使用这样的命令过滤掉您需要的内容.

sudo tshark -i <interface> -f tcp -R "http.request" -V |
perl -ne'print if /^Hypertext/../^Frame/'

这将捕获所有TCP数据包,仅显示过滤http.requests,然后仅对第4层HTTP内容进行perl过滤.您可能希望添加显示过滤器以仅获取单个Web服务器-R“http.request和http.host ==””

您将要检查所有内容,以查看这两个请求是否在线,Cookie,GET URL,用户代理等.确保网站不会做一些愚蠢的事情.

2010年1月23日更新:根据新信息,我建议设置Accept,Accept-Language,Accept-Charset和Accept-Encoding.你可以通过$ua-> default_headers()来做到这一点.如果您要求的是更多功能,那么您可以随时对其进行子类化.我把这个方法用于我的GData API,你可以找到my example on of a UserAgent subclass on github.

原文链接:https://www.f2er.com/Perl/171984.html

猜你在找的Perl相关文章