#!/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;
编译时,我得到......
在cavirtex.pl第9行打印时使用未初始化的值$ cavirtex。
更多信息: https://www.cavirtex.com/api_information#orderbook
感谢。
编辑/更多信息: 在我的程序中,当我替换...
https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD
...与
https://www.bitstamp.net/api/ticker/
它运作得很好。怪异。
答案 0 :(得分:7)
运行以下命令:
perl -MLWP::Simple -e 'getprint "https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD"'
产生以下结果:
403 Forbidden <URL:https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD>
但是,在浏览器中访问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;
}
希望有所帮助(TL; DR看起来您需要为此特定API调用设置用户代理)
编辑:为什么它对你尝试的第二个URL工作正常的原因是因为它击中了一个似乎不关心用户代理的不同API。
答案 1 :(得分:2)
@Dave Cooper回答很棒。您也可以通过以下方式更改LWP :: Simple用户代理:
use strict;
use warnings;
use JSON qw( decode_json );
use LWP::Simple qw/$ua get/;
$ua->agent('Mozilla/5.0');
my $cavirtex = get('https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD');
print $cavirtex;
注意:$ua
导出变量是LWP::UserAgent
的实例。 LWP::Simple
对象
$ua
次操作