2016-08-04 42 views
1

Ich verwende HTTP::Tiny, um eine Beispiel-HTTP-Client zu tun (nur erhalten und Anfragen). GET Anfragen funktionieren gut, aber ich habe ein Problem, wenn ich versuche, eine POST Anfrage zu tun. Hier ist der Code:Perl http Post Anfrage: Versuch, Referenz als Lvalue in Substr zu verwenden

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}; 
} 

Wo %params Hash wie { key1 => "val1", key2 => "val2" } ist. Die Nachricht, die ich bekomme, ist Attempt to use reference as lvalue in substr at /usr/lib/perl5/vendor_perl/5.22/HTTP/Tiny.pm line 806, <STDIN> line 7. und ich habe keine Idee, wie man es löst.

+0

Sie können versuchen, 'post_form' Methode, die ich glaube, Sie die params als hashref passieren kann. [post_form] (http://search.cpan.org/~dagolden/HTTP-Tiny-0.058/lib/HTTP/Tiny.pm#post_form) Ich habe den Code nicht versucht, sorry. – zafatar

+0

@ZaferK was ist der Wert von '$ form_data'? –

+0

soweit ich das aus der Dokumentation verstehe. '$ form_data = {key1 =>" val1 ", key2 =>" val2 "}; $ response = $ http-> post_form ($ url, $ form_data); ' Dies könnte für POST funktionieren. – zafatar

Antwort

3

Es sieht aus wie Sie eigentlich wollen:

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

Die Dokumentation für HTTP::Tiny::request ermöglichen eine Hashreferenz \%options

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

und für seine Schlüssel sagen, sind folgende

Gültige Optionen:

  • er aders [...]

  • Inhalt - Ein Skalar wie der Körper der Anforderung oder eine Codereferenz umfassen, die iterativ den Körper des Ersuchens

Dies bedeutet, aufgerufen wird, zu erzeugen, dass der Schlüssel content einen Wert haben sollte, der entweder ein Skalar (String) oder eine Code-Referenz ist. Der Wert für content in Ihrem Code ist eine Hash-Referenz, .

Ändern Sie es in eine Zeichenfolge oder eine Codereferenz.