加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:54:03 所属栏目:大数据 来源:网络整理
导读:这是我关于SO的第一篇文章,所以要温柔.我甚至不确定这是否属于这里,但是这里有. 我想访问我的一个个人帐户的一些信息.该网站写得很差,要求我手动输入我想要的信息日期.这确实是一种痛苦.我一直在寻找借口来学习更多Perl所以我认为这将是一个很好的机会.我的
这是我关于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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读