【问题标题】:LWP::Simple::get fails on a URL that works in the browserLWP::Simple::get 在浏览器中工作的 URL 上失败
【发布时间】:2014-08-05 02:42:03
【问题描述】:
#!/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 行的 print 中使用未初始化的值 $cavirtex。

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

谢谢。

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

https://www.cavirtex.com/api2/orderbook.json?currencypair=BTCCAD

与...

https://www.bitstamp.net/api/ticker/

它工作得很好。很奇怪。

【问题讨论】:

    标签: json perl get


    【解决方案1】:

    运行以下命令:

    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。

    我决定在我的请求中手动指定一个已知良好的用户代理。如果这不起作用,我会尝试生成 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。

    【讨论】:

      【解决方案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 对象中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-27
        相关资源
        最近更新 更多