Alex_adl04
Alex_adl04

Reputation: 560

LWP POST request not working

The if statement is showing me that there is a response, but when I try to print the response I get nothing

use LWP::UserAgent;

use strict;
use warnings;

use HTTP::Request::Common;

# use this {"process": "mobileGps","phone": "9565551236"}

my $url  = "the url goes here";
my $json = '{data :{"process" : "mobileGps", "phone" : "9565551236"}}';

my $req = HTTP::Request->new( POST => $url );

$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );

my $ua  = LWP::UserAgent->new;
my $res = $ua->request( $req );

if ( $res->is_success ) {
    print "It worked";
    print $res->decoded_content;
}
else {
    print $res->code;
}

I do have the URL: I just took it out for the purpose of this example.

What am I missing?

Upvotes: 0

Views: 1684

Answers (3)

Borodin
Borodin

Reputation: 126722

Can you not use the debugger, or add some print statements to see how your program is progressing?

If not then this is going to be another case of on-line turn-by-turn debugging, which benefits no one except the OP, and the ultimate diagnosis is that they should have learned the language first

The internet can be wise, but it will make many more artisans Pretender than craftsmen

Please don't ever expect to make a half-hearted attempt at a sketch, and then rope in the rest of the world to finish your job. It takes a huge amount of experience, aptitude, and understanding to get even a "What's your name" .. "Hello" program working, and things only get harder thereafter

If you don't like being careful and thorough, and would rather ask for people to do your stuff for you than discover a solution by experimentation, then you are a manager, not a programmer. I hope you will never try to advance a software career by getting great at delegating, because that doesn't work with software

Here. Use this as you will. The world is full of managers; it is good programmers that we need

use strict;
use warnings 'all';
use feature 'say';

use constant URL => 'http://example.com/';

use LWP;

my $ua  = LWP::UserAgent->new;

my $json = '{}';

my $req = HTTP::Request->new( POST => URL );
$req->header( content_type => 'application/json' );
$req->content( $json );

my $res = $ua->request( $req );

say $res->as_string;

Upvotes: 1

Rohit Singhal
Rohit Singhal

Reputation: 14

The code is fine. The problem must be with the server that is serving the request upon status code 200. You should check at server's end.

Upvotes: -1

oalders
oalders

Reputation: 5279

Try debugging your script like this:

use strict;
use warnings;

use HTTP::Request::Common;
use LWP::ConsoleLogger::Easy qw( debug_ua );
use LWP::UserAgent;

# use this {"process": "mobileGps","phone": "9565551236"}

my $url = "the url goes here";
my $json = '{data :{"process" : "mobileGps", "phone" : "9565551236"}}';

my $req = HTTP::Request->new(POST => $url);

$req->header('Content-Type' =>'application/json');
$req->content($json);

my $ua = LWP::UserAgent->new;
debug_ua( $ua );
my $res = $ua->request($req);


if ($res->is_success) {
    print "It worked";
    print $res->decoded_content;
} else {
    print $res->code;
}

That will (hopefully) give you a better idea of what's going on.

Upvotes: 1

Related Questions