in reply to Re^3: Consuming A Web Service
in thread Consuming A Web Service

NetWallah, here is the code with your suggestion as listed:

use strict; use warnings; use LWP::UserAgent; use HTTP::Request::Common qw(GET); my $ua = LWP::UserAgent->new; my $endpoint = 'Http://www.somecompany.com:8081/api/ourCompany/getASN +'; my $req = HTTP::Request->new('GET', 'Accept' => 'application/xml'); $req->url($endpoint); my $resp = $ua->request($req); my $message = $resp->content; print "printing message: $message\n\n";

I get the error message "bad header argument at code.pl line 8." Which is the HTTP::Request->new line.


Here is the working code with the slight modifications:

use strict; use warnings; use LWP::UserAgent; use HTTP::Request::Common qw(GET); use XML::Simple; my $ua = LWP::UserAgent->new; my $endpoint = 'Http://www.somecompany.com:8081/api/ourCompany/getASN +'; my $req = HTTP::Request->new(GET => $endpoint); $req->header(Accept => 'application/xml'); $req->url($endpoint); my $resp = $ua->request($req); my $message = $resp->content; print "printing message: $message\n\n";

Thanks,
pkupnorth

Replies are listed 'Best First'.
Re^5: Consuming A Web Service
by pryrt (Abbot) on Nov 03, 2016 at 15:47 UTC

    pkupnorth, you changed 3 things:

    • Changed from 'GET' to GET => $endpoint
    • Moved the 'Accept' to a separate $req->header() line
    • Changed from 'Accept' => ... to Accept => ...

    If you do them one at a time, you will find that it was moving the Accept from the ->new(...) to a separate $req->header() line that got rid of the "Bad header argument at code.pl line 8." error, not the removal of the single quotes.

    use strict; use warnings; use LWP::UserAgent; use HTTP::Request::Common qw(GET); my $ua = LWP::UserAgent->new; my $endpoint = 'Http://www.sierraaluminum.com:8081/api/MarvinWindows/ +getASN'; my $req = HTTP::Request->new('GET'); $req->header('Accept' => 'application/xml'); $req->url($endpoint); my $resp = $ua->request($req); my $message = $resp->content; print "printing message: $message\n\n";

    update: fixed the order of the quoted version in the bullet list

    update 2: added "not the removal of the single quotes"; removed an unnecessary sentence that was unnecessarily argumentative in tone.

Re^5: Consuming A Web Service
by NetWallah (Canon) on Nov 03, 2016 at 17:25 UTC
    Thanks, pryrt for the analysis.

    The syntax for HTTP::Request's "new" method requires arguments in pairs, so my previous suggestion was wrong.

    It should have been:

    my $req = HTTP::Request->new(GET => $endpoint, Accept => 'application/xml');
    The "Accept" and "GET" can optionally be quoted.

            ...it is unhealthy to remain near things that are in the process of blowing up.     man page for WARP, by Larry Wall

      I had tried my $req = HTTP::Request->new(GET => $endpoint, Accept => 'application/xml'); using the OP's server, but I still got the "Bad header argument" error. When I switched to using the separate $req->header, then it started working.

      Looking at HTTP::Request (quoted below), I originally read it the same way as you, that new() required pairs, and was surprised the code above would still give the error. But on a re-read (underline added):

      Constructs a new HTTP::Request object describing a request on the object $uri using method $method. The $method argument must be a string. The $uri argument can be either a string, or a reference to a URI object. The optional $header argument should be a reference to an HTTP::Headers object or a plain array reference of key/value pairs. The optional $content argument should be a string of bytes.

      The $header should either be an object or an arrayref. The $content is the content of the request, not of the header. Running the OP code with the headers with your changes, but in an arrayref, eliminates the error: my $req = HTTP::Request->new(GET => $endpoint, [Accept => 'application/xml']);

        Very nice (++). Thanks for the research, and "Final Answer".

                ...it is unhealthy to remain near things that are in the process of blowing up.     man page for WARP, by Larry Wall