What I use it HTTP and LWP::UserAgent Perl modules
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);
my $cgi = new CGI();
my $post = '';
# Create a request
my $req = new HTTP::Request POST => 'https://www.server.com';
$req->content_type('application/x-www-form-urlencoded');
$req->content($post);
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
Paul Franz
Paul J. Sala wrote:
I created a perl script that reads in a xml file, then encodes the contents of
the file into a string, opens a TCP socket over port 80, then POSTs the string
to a cgi on a non-SSL webserver. Everything works fine, and here is that code:
#!/usr/bin/perl
use Socket;
use CGI;
#- open xml file and read it in
open(INFILE,"</tmp/caaresultstest.xml");
my @rdata = <INFILE>;
my $rstr = '';
foreach $line (@rdata) {
$rstr .= $line;
}
close(INFILE);
print CGI::escape(rstr);
#encode xml file contents string
my $encrstr = $rstr;
$encrstr =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg;
$encrstr = "caaresult=$encrstr";
my $rlen = length $encrstr;
if(!defined open_TCP('F','http://www.xyz.com','80')) {
print "Error connecting to web server\n";
exit(-1);
}
print F "POST /cgi-bin/mycgi.pl HTTP/1.0\n";
print F "Accept: */*\n";
print F "User-Agent: caaresults/1.0\n";
print F "Content-type: application/x-www-form-urlencoded\n";
print F "Content-length: $rlen\n";
print F "\n";
print F "$encrstr";
my $response = <F>;
my $data = '';
while(<F>) {
$data .= $_;
}
close(F);
print $data;
############
# open_TCP #
############
# Given ($file_handle, $dest, $port) return 1 if successful, undef when
# unsuccessful.
#
# Input: $fileHandle is the name of the filehandle to use
# $dest is the name of the destination computer,
# either IP address or hostname
# $port is the port number
# Output: successful network connection in file handle
#
use Socket;
sub open_TCP
{
# get parameters
my ($FS, $dest, $port) = @_;
my $proto = getprotobyname('tcp');
socket($FS, PF_INET, SOCK_STREAM, $proto);
my $sin = sockaddr_in($port,inet_aton($dest));
connect($FS,$sin) || return undef;
my $old_fh = select($FS);
$| = 1; # don't buffer output
select($old_fh);
1;
}
The problem is that now I have to do this same thing with a HTTPS server over
port 443. I have used openssl in the past to communicate with HTTPS servers but
I only did a GET, not a POST. Here is how I successfully used openssl in perl
to do a GET:
#
#!/usr/bin/perl
$OPENSSL = "/var/local/httpd/etc/openssl";
$pw = encode_base64("$userID:$pwd");
$echo = "GET /index.html HTTP/1.0\nConnection: close\nAuthorization:Basic
$pw\nHost: $host:$port\n\n";
print "About to open an SSL connection on $host";
open (CHECK, "echo \"$echo\" | $OPENSSL s_client -quiet -connect
www.xyz.com:443 -ssl3 2>&1 |");
print "SSL connection opened on $host. Processing return data.";
#print out index.html file we asked for
LINE: while (<CHECK>)
{
print "$_" if (defined $opt_d); # DEBUG
}
close (CHECK)
I tried to use the code above and change the GET to a POST and attach the
string to send several different ways, but I could not get it to work. Can
anyone post an example of how to do a POST using openssl in perl.
Thanks........Paul
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openssl-users@openssl.org
Automated List Manager [EMAIL PROTECTED]
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openssl-users@openssl.org
Automated List Manager [EMAIL PROTECTED]