Использование KeyForge API с Perl - PullRequest
2 голосов
/ 30 марта 2019

Я пытаюсь вызвать KeyForge API с помощью простой Perl-программы, но она не работает. Я использую то, что в документации LWP :: UserAgent:

use strict;
use warnings;
use LWP::UserAgent ();

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

my $response = $ua->get('https://www.keyforgegame.com/api/decks/');

if ($response->is_success) {
    print $response->decoded_content;
}
else {
    die $response->status_line;
}

Программа печатает:

500 Ошибка записи: в строке 16 test.pl.

Если я использую URL https://www.google.com или http://www.example.com,, это работает. HTML-код отображается правильно.

Если я использую эту простую программу PowerShell, она тоже работает:

$Url = "https://www.keyforgegame.com/api/decks/"
$decks = Invoke-RestMethod ($url)
$decks

Отображается:

данные подсчета


743719 {@ {name = Dr. "Старый" Джеффрис; расширение = 341; power_level = 0; цепи = 0; побед = 0; Потери = 0; ID = ec86db52-e41e-4e ...

Чего мне не хватает?

PS: я использую Perl 5.16.3 в Windows 10.


EDIT: Спасибо за вашу помощь. Я наконец узнал, что происходит. Оказывается, у меня была очень старая версия Net :: HTTP (с 2013 года). Я обновил его, и теперь он работает «из коробки», без настройки агента, файлов cookie или электронной почты. Сообщение об ошибке на самом деле было от клиента, а не от сервера.

1 Ответ

4 голосов
/ 31 марта 2019
$ perl -MLWP::UserAgent -e'
   my $ua = LWP::UserAgent->new();
   my $response = $ua->get("https://www.keyforgegame.com/api/decks/");
   print $response->as_string;
'
HTTP/1.1 403 Forbidden
...
Content-Type: text/html; charset=UTF-8
...

<!DOCTYPE html>
...
<title>Access denied | www.keyforgegame.com used Cloudflare to restrict access</title>
...
            <h2 data-translate="what_happened">What happened?</h2>
            <p>The owner of this website (www.keyforgegame.com) has banned your access based on your browser's signature (4bfe0c0e2e86ab84-ua22).</p>
...

Но,

$ perl -MLWP::UserAgent -e'
   use version; our $VERSION = qv("v1.0.0");
   my $ua = LWP::UserAgent->new(
      agent => "NameOfTool/$VERSION",
      from  => q{me@example.com},
   );
   my $response = $ua->get("https://www.keyforgegame.com/api/decks/");
   print $response->as_string;
'
HTTP/1.1 200 OK
...
Content-Type: application/json
...

{"count":...

Если они хотят заблокировать вас, они могут.Таким образом, в ваших интересах предоставить уникальное имя приложения, правильную версию и действительный адрес электронной почты (даже если вы предоставляете нежелательную почту для поля agent и не используете поле from).Это дает им больше возможностей для решения любых проблем с вашей программой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...