【问题标题】:Access website - WWW::Mechanize访问网站 - WWW::Mechanize
【发布时间】:2011-11-13 20:53:56
【问题描述】:

我尝试使用下面的代码来获取网站 htm 源并且它可以工作。但是,当我使用以下代码访问网站http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct 时,我无法得到结果。但是,我可以通过正确使用浏览器访问此页面。你能给我一些提示或技巧来解决这个问题吗?谢谢。

#!/usr/bin/perl

use strict;
use warnings;

# create a new browser
use WWW::Mechanize;
my $browser = WWW::Mechanize->new();

# tell it to get the main page

my $sURL = 'http://www.apple.com';

#my $sURL = 'http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct';

$browser->get($sURL);

print $browser->content;

exit(0);

【问题讨论】:

    标签: html perl


    【解决方案1】:

    这是一种奇怪的行为,但是您要检索的 url 上的站点需要定义以下标头: Accept、Accept-Encoding、Accept-Language、Accept-Charset、Cookie。

    否则服务器根本不响应。

    您只需在“获取”请求之前插入以下代码即可轻松完成此操作:

    $browser->add_header(
        "Accept"          => "",
        "Accept-Encoding" => "",
        "Accept-Language" => "",
        "Accept-Charset"  => "",
        "Cookie"          => ""
    );
    

    您可以插入一些实际值来代替空字段,但这也可以。

    【讨论】:

    • yko - 太棒了!其实我也是这么想的。但是,你能告诉我你为什么知道吗?谢谢。
    • @TommyLiu 这只是一种体验。我从 chrome 请求中复制了标头并将它们放入测试机械化请求中。一旦它起作用,我就开始一个一个地删除标题。糟糕 - 如果我删除任何标题,它就会停止工作。然后我逐块删除标题内容以尝试查找重要数据。当我发现它不需要任何数据时,我真的很惊讶。只是标题名称
    • 我能够将标题剥离到'Accept' => 'text/html', 'Accept-Language' => 'en', 'Cookie' => ''
    • 不错的收获。我今天早些时候对此进行了调查,但没有与通常的嫌疑人取得任何联系。
    • @flesk 谢谢,我刚刚在某个地方遇到过类似的情况。
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多