[英]LWP::Simple::get fails on a URL that works in the browser
#!/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/
它工作得很好。 奇怪的。
運行以下命令:
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。
@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
對象中委派
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.