Perl http post请求:尝试在substr中使用引用作为左值

时间:2016-08-04 08:37:34

标签: perl httprequest httpclient

我正在使用HTTP::Tiny来做一个示例http客户端(只有get和post请求)。 GET请求工作正常但我尝试执行POST请求时遇到问题。这是代码:

sub postRequest {
    my %params = @_;
    my $url= "http://localhost:3001/Perform";
    my %opt;
    $opt{content} = \%params;
    my $http = HTTP::Tiny->new();
    my $response = $http->request("POST", $url, \%opt);

    # my $response = $http->post($url, {content => \%params}); # not working too

    unless ($response->{success}) {
        die "Unsuccessful request to " . $url. "\n";
    }

    print "response: " . $response->{content} . "\n";
    return $response->{content};
}

%params哈希就像{ key1 => "val1", key2 => "val2" }一样。我得到的消息是Attempt to use reference as lvalue in substr at /usr/lib/perl5/vendor_perl/5.22/HTTP/Tiny.pm line 806, <STDIN> line 7.,我不知道如何解决它。

2 个答案:

答案 0 :(得分:3)

看起来你真的想要:

$http->post_form($url, \%params);

答案 1 :(得分:1)

HTTP::Tiny::request的文档允许哈希引用\%options

$response = $http->request($method, $url, \%options);

并且其密钥说明如下

  

有效选项包括:

     
      
  • 标题[...]

  •   
  • content - 包含作为请求正文的标量或将迭代调用以生成请求正文的代码引用

  •   

这意味着content键应该具有标量(字符串)或代码引用的值。代码中content的值是哈希引用\%params

将其更改为字符串或代码引用。