当前位置:  开发笔记 > 编程语言 > 正文

How can I make LWP::UserAgent look like another browser?

如何解决《HowcanImakeLWP::UserAgentlooklikeanotherbrowser?》经验,为你挑选了1个好方法。

This is my first post on SO, so be gentle. I'm not even sure if this belongs here, but here goes.

我想访问我的一个个人帐户的一些信息.该网站写得不好,要求我手动输入我想要的信息日期.这确实很痛苦.我一直在寻找借口来学习更多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问题.



1> Evan Carroll..:
通过抓取获取不同的网页

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

首先取消简单的可能性

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

现在尝试复制工作浏览器

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

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

故障排除

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

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

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

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

更新2010年1月23日:基于新的信息,我建议设置Accept,和Accept-Language,Accept-CharsetAccept-Encoding.你可以通过直通$ua->default_headers().如果您要求的是更多功能,那么您可以随时对其进行子类化.我把这个方法用于我的GData API,你可以在github上的UserAgent子类上找到我的例子.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有