Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: HTTP Post of XML data

by dorko (Parson)
on Nov 14, 2007 at 03:37 UTC ( #650667=note: print w/replies, xml ) Need Help??

in reply to HTTP Post of XML data

UPDATE: The original post was modified between the time I started writing and the time I posted this response. I'm sure my response looks odd now, so all bets are off on my response making any kind of sense.

Warning: Although I've submitted XML via a POST, I've never used XML::Writer in combination with LWP::UserAgent like you're trying to do.

From the docs for XML::Writer, the OUTPUT parameter of an XML::Writer object must be either an "object blessed into IO::Handle or one of its subclasses (such as IO::File), or a reference to a string." I'm pretty sure that $browser->post('http://localhost:8180/automanager/request') is neither of those.

Plus, from the SYNOPSIS section of the XML::Writer docs, I'm pretty sure all you've done is created an object. It takes a bit more to actually create XML. This untested snippet is modified from the synopsis of the XML::Writer docs:

my $output; my $writer = new XML::Writer(OUTPUT => \$output); $writer->startTag("greeting", "class" => "simple"); $writer->characters("Hello, world!"); $writer->endTag("greeting"); $writer->end(); print $output;
If you then POST $output to your URL, I think that will do what you want. You'll need to specify $object as the Content of the POST (See the REQUEST METHODS section of the LWP::UserAgent docs. I remember having to use HTTP::Request::Common to build the request, but I don't remember why I needed to do that at the moment.)

All this is from a quick read of the docs and from memory so it could all be way off base, but I think it at least points you in the right directions.



-- Yeah, I'm a Delt.

Replies are listed 'Best First'.
Re^2: HTTP Post of XML data
by hallikpapa (Scribe) on Nov 14, 2007 at 03:46 UTC
    Sorry for editing the original post. I should have left the original and added some of my changed content. I will check out some of your suggestions. Any other suggestions on how you would post your XML data instead of using LWP::UserAgent? Update: So I created a little test script, and I saw the test XML post in the jboss log correctly:
    #!/usr/bin/perl use XML::Writer; use LWP::UserAgent; my $output; my $writer = new XML::Writer(OUTPUT => \$output); $writer->startTag("greeting", "class" => "simple"); $writer->characters("Hello, world!"); $writer->endTag("greeting"); $writer->end(); print $output; my $browser = LWP::UserAgent->new; my $url = 'http://localhost:8180/request'; my $response = $browser->post($url,Content => $output);
    And I added this at the end of my current script, and got this error:
    Not an ARRAY reference at /usr/share/perl5/HTTP/Request/ line + 83.
    my $browser = LWP::UserAgent->new; my $url = 'http://localhost:8180/request'; my $response = $browser->post($url,$writer);
    I tried with Content => \$writer, CONTENT => $writer, and just $writer. I'll keep fiddling with this unless someone else has suggestions on a better way to post this $writer to a specific port/url
      It looks like you are trying to post an XML::Writer object to a URL. Without looking at the API for either XML::Writer or LWP::UserAgent I can only guess, but I seriously, seriously doubt that procedure is possible. What you will want to post is not the writer object, but the output it produces.
        I think he's trying to use Perl 5.8's "stringy filehandles".

        From the docs:

        OUTPUT An object blessed into IO::Handle or one of its subclasses (such a +s IO::File), or a reference to a string; if this parameter is not pre +sent, the module will write to standard output. If a string reference + is passed, it will capture the generated XML (as a string; to get by +tes use the Encode module).
        Looks fine to me.

        I wonder what version of perl is on the web-server.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://650667]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (14)
As of 2018-06-22 15:43 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (124 votes). Check out past polls.