Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

curl http post

by bigup401 (Pilgrim)
on Mar 25, 2017 at 16:10 UTC ( [id://1185916]=perlquestion: print w/replies, xml ) Need Help??

bigup401 has asked for the wisdom of the Perl Monks concerning the following question:

anyone can help me with this. am getting this error you need a request object, not a http::response. am new to curl post

this is the curl script

curl https://site.com/api/inforequests -H "Authorization: Token xert34 +5llkd736gdy3" \ -d name=+80000000001 \ -d country=BXC \ -d email=3000
#!/usr/bin/perl use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->agent("MyApp/0.1"); $url = "https://site.com/api/inforequests"; my @headers = ("Authorization: Token xert345llkd736gdy3"); foreach my $ml(@headers) { $auth = $ml; } my $data = { name => 'john', country=> 'ca', email=> 'john@email.com', }; my $req = HTTP::Request->new(POST => '$url', 'Content-type' => 'application/json', 'Authorization' => "$auth" ); $req->content_type('application/json'); $req->content($data); my $res = $ua->request($req); if ($res->is_success) { print $res->content; } else { print $res->status_line, "n"; }

Replies are listed 'Best First'.
Re: curl http post
by 1nickt (Canon) on Mar 25, 2017 at 17:28 UTC

    Hi,

    I ran your code and got:

    Bad header argument at 1185916.pl line 20.
    ... don't you?

    Also, I believe the correct name for one of the HTTP headers you employ is 'Content-Type' (note capitalization)(edit: I was wrong about that, thx beech.)

    ... and the value of your 'Authorization' header looks like it might be missing some punctuation?

    Edit: Also, the server at the URL in your code doesn't respond ...

    Try something like the following, with your real URL, header value, etc. Note that HTTP::Tiny and JSON are both Perl core modules so you already have them installed.

    #!/usr/bin/perl use strict; use warnings; use HTTP::Tiny; use JSON; use Data::Dumper; my $url = "https://site.com/api/inforequests"; my $json = encode_json { name => 'john', country => 'ca', email => 'john@email.com', }; my $http = HTTP::Tiny->new( default_headers => { Authorization => 'Token xert345llkd736gdy3', } ); my $response = $http->post( $url => { content => $json, headers => { 'Content-Type' => 'application/json' }, }); if ( $response->{'is_success'} ) { print Dumper( decode_json $response->{'content'} ); } else { print "$response->{'status'} $response->{'reason'}\n"; } __END__

    Hope this helps!


    The way forward always starts with a minimal test.

      Also, I believe the correct name for one of the HTTP headers you employ is 'Content-Type' (note capitalization) ...

      Hi,

      http header names are case insensitive, capitalization does not matter

        Updated, thx!

        The way forward always starts with a minimal test.

      thanks it worked

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1185916]
Approved by Athanasius
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2024-04-24 05:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found