我正在尝试从perl脚本运行一个简单的API请求。但它似乎不起作用。如果复制到Web浏览器,则相同的请求没有任何问题。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
my $query = 'http://checkdnd.com/api/check_dnd_no_api.php?mobiles=9944384761';
my $result = get($query);
print $result."\n";
当我使用getprint($query)
时 - 它会给出403错误。
答案 0 :(得分:3)
如果您查看回复正文(即不仅仅是状态代码403),您会发现:
本网站的所有者(checkdnd.com)已根据您的浏览器签名禁止访问(2f988642c0f02798-ua22)。
这意味着它阻止了客户端,因为它可能看起来太像非浏览器了。对于此站点,一个简单的修复是包含一些User-Agent标头。以下适用于我:
my $ua = LWP::UserAgent->new;
$ua->default_header('User-Agent' => 'Mozilla/5.0');
my $resp = $ua->get('http://checkdnd.com/api/check_dnd_no_api.php?mobiles=9944384761');
my $result = $resp->decoded_content;
有问题的网站似乎由Cloudflare提供服务,它有一些称为“浏览器完整性检查”的东西。来自support page for this feature:
...查找垃圾邮件发送者最常滥用的常见HTTP标头,并拒绝访问您的网页。它还将挑战没有用户代理或非标准用户代理的访问者(也常见于滥用机器人,抓取工具或访问者)。