首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl LWP::UserAgent模拟浏览器

Perl LWP::UserAgent模拟浏览器
EN

Stack Overflow用户
提问于 2019-09-09 23:08:19
回答 1查看 672关注 0票数 1

我试图自动获取网页使用LWP::UserAgent,但我得到403禁止的错误,而如果我从控制台使用wget,https://dreaminislam.com/a/或curl,我得到的页面正常。如何为LWP::UserAgent设置正确的选项以获取该页面,并类似于模拟真实浏览器。以下是示例代码。

代码语言:javascript
复制
use HTTP::CookieJar::LWP ();
use LWP::UserAgent;
use LWP::Simple;

    my $url = qq{https://dreaminislam.com/a/};
    my $content = getUrl($url);
    exit;

sub getUrl {

    my $url = shift;
    my $jar = HTTP::CookieJar::LWP->new;
    my $ua = LWP::UserAgent->new(timeout => 180,  cookie_jar => $jar, protocols_allowed => ['http', 'https']);
    $ua->agent(qq{Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0});

    my $response = $ua->get($url);

    if ($response->is_success) {
        my $content = $response->decoded_content;
        return $content;
    } else {
        my $content = $response->decoded_content;
        printf "Get url error [%d] %s.\n", $response->code, $response->message;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 00:59:24

看起来在这个站点上安装了一些反机器人保护。它似乎至少需要一个User-Agent和一个Accept报头:

代码语言:javascript
复制
use LWP::UserAgent;
use HTTP::Request;

my $ua = LWP::UserAgent->new();

my $req = HTTP::Request->new(GET => 'https://dreaminislam.com/a/');
$req->header('User-Agent' => 'Mozilla/5.0');
$req->header('Accept' => '*/*');
my $response = $ua->request($req);

die $response->code if ! $response->is_success;
print $response->decoded_content;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57856721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档