2016-10-29 2 views
1

Я пытаюсь запустить простой запрос API из Perl-скрипта. Но, похоже, это не работает. Тот же запрос, если он скопирован в веб-браузер, работает без проблем.Простой запрос API не работает - ошибка 403

#!/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

Используемая пользователем строка агента Perl, вероятно, заблокирована. Вы можете обойти эту проблему, изменив ее на что-то другое. – grooveplex

ответ

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-заголовки, чаще всего злоупотребляющие спамерами и запрещающие доступ к вашей странице. Это также вызовет посетителей, у которых нет пользовательского агента или нестандартного пользовательского агента (также обычно используется ботами-разбойниками, сканерами или посетителями).

+1

Возможно, добавьте, что причиной этого является то, что пользовательский агент по умолчанию ('libwww-perl') был/используется крекерами, а блокировка - простой способ предотвратить самые простые атаки. – grooveplex

+0

@grooveplex: Я не уверен, если это причина. Вариации пользовательского агента «Mozilla/...» также используются в вредоносных программах и т. Д. - намного меньше, чем libwww-perl. Скорее всего, они блокируют все, что находится слишком далеко от пользовательского агента браузеров. –