LWP :: Simple ::在浏览器中工作的URL失败

Geo*_*ran 2 perl json get

#!/usr/bin/perl

use strict;
use warnings;
use JSON qw( decode_json );
use LWP::Simple;

my $cavirtex = get('https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD');
print $cavirtex;
Run Code Online (Sandbox Code Playgroud)

编译时,我得到......

在cavirtex.pl第9行打印时使用未初始化的值$ cavirtex.

更多信息:https: //www.cavirtex.com/api_information#orderbook

谢谢.

编辑/更多信息:在我的程序中,当我替换...

https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD
Run Code Online (Sandbox Code Playgroud)

与...

https://www.bitstamp.net/api/ticker/
Run Code Online (Sandbox Code Playgroud)

它工作得很好.奇怪的.

Dav*_*per 7

运行以下命令:

perl -MLWP::Simple -e 'getprint "https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD"'
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

403 Forbidden <URL:https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD>
Run Code Online (Sandbox Code Playgroud)

但是,在浏览器中访问URL似乎工作正常.这让我预感到正在检查用户代理或需要cookie.

我决定在我的请求中手动指定一个已知良好的用户代理.如果这不起作用,我会玩弄生成饼干.

使用以下代码,我得到了预期的结果:

require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->agent("Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like    Gecko) Chrome/37.0.2049.0 Safari/537.36");
my $response = $ua->get('https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD');

if ($response->is_success) {
    print $response->decoded_content;  # or whatever
}
else {
   die $response->status_line;
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助(TL; DR看起来您需要为此特定API调用设置用户代理)

编辑:它为你尝试的第二个URL工作正常的原因是因为它击中了一个似乎不关心用户代理的不同的API.