Category:
Author/Contact Info
Description: This module tacks the post(), postprint(), and poststore() functions onto LWP::Simple. This is just like their 'GET' counterparts except it is the POST method instead (and takes optional parameters).
package LWP::Simple::Post;
use strict;
use warnings;
use HTTP::Request::Common;

sub import {
    my $pkg = shift;
    my $callpkg = caller;
    require LWP::Simple;
    push @LWP::Simple::EXPORT, qw(post postprint poststore);
}

sub LWP::Simple::post ($;%) {
    my $url = shift;
    my $ret;

    LWP::Simple::_init_ua() unless $LWP::Simple::ua;
    my $request = POST $url,
                       Content_Type => 'form-data',
                       Content => [ @_ ];
    my $response = $LWP::Simple::ua->request($request);
    return $response->is_success ? $response->content : undef;
}

sub LWP::Simple::postprint ($;%) {
    my $url = shift;
    LWP::Simple::_init_ua() unless $LWP::Simple::ua;
    
    my $request = POST $url,
                       Content_Type => 'form-data',
                       Content => [ @_ ];
    local $\ = ""; # ensure standard $OUTPUT_RECORD_SEPARATOR
    my $callback =
    ($^O ne 'MacOS'
     ? sub { print $_[0]; }
     : sub { $_[0] =~ s/\015?\012/\n/g; print $_[0]; });
    
    my $response = $LWP::Simple::ua->request($request, $callback);
    unless ($response->is_success) {
    print STDERR $response->status_line, " <URL:$url>\n";
    }
    
    return $response->code;
}

sub LWP::Simple::poststore ($$;%) {
    my $url = shift;
    my $file = shift;
    LWP::Simple::_init_ua() unless $LWP::Simple::ua;
    
    my $request = POST $url,
                       Content_Type => 'form-data',
                       Content => [ @_ ];
    my $response = $LWP::Simple::ua->request( $request, $file );

    return $response->code;
}

1;

__END__

=head1 NAME

LWP::Simple::Post - adds the post method to LWP::Simple

=head1 SYNOPSIS

 use LWP::Simple::Post;
 use LWP::Simple;

 poststore 'http://www.perlmonks.org',
           'myfile.xml',
           node => 'diotalevi',
           displaytype => 'xml';
 post 'http://www.perlmonks.org',
       node => 'diotalevi';
 postprint 'http://www.perlmonks.org',
       node => 'diotalevi',
       displaytype => 'xml';

=head1 DESCRIPTION

This module tacks the post(), postprint(), and poststore() functions o
+nto
LWP::Simple.

=over 4

=item post($url, Header => Value,...)

The post() function will fetch the document identified by the given UR
+L
and return it.  It returns C<undef> if it fails.  The $url argument ca
+n
be either a simple string or a reference to a URI object. The remainin
+g
arguments are a list of parameters to pass as form data.

You will not be able to examine the response code or response headers
(like 'Content-Type') when you are accessing the web using this
function.  If you need that information you should use the full OO
interface (see L<LWP::UserAgent>).

 $url = 'http://www.perlmonks.org';
 %parameters = ( node => 'Offering Plate );
 post $url, %parameters;

=item postprint($url, Header => Value,...)

Post and print a document identified by a URL. The document is printed
to STDOUT as data is received from the network.  If the request fails,
then the status code and message are printed on STDERR.  The return
value is the HTTP response code.

=item poststore($url, $file, Header => Value,...)

Store the document identified by a URL and stores it in the file. The
return value is the HTTP response code.

=back

=head1 NOTES

Be sure to use() LWP::Simple::Post before loading LWP::Simple. This mo
+dule
must extend LWP::Simple exports its own methods.

=head1 SEE ALSO

L<LWP::Simple>, L<HTTP::Request::Common>

=head1 AUTHOR

Joshua b. Jore E<lt>jjore@cpan.orgE<gt>

=cut