简单的API请求无法正常工作 - 403错误

时间:2016-10-29 17:47:17

标签: perl get

我正在尝试从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错误。

1 个答案:

答案 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标头,并拒绝访问您的网页。它还将挑战没有用户代理或非标准用户代理的访问者(也常见于滥用机器人,抓取工具或访问者)。