Oh, ok! Fine!!! Your problem is more interesting than those in my bag of holding. You will really need to dig into the documentation to make this fun and easy: HTTP::Request, LWP::UserAgent, WWW::Mechanize, &c. :P
#!/usr/bin/env perl
use strictures;
use WWW::Mechanize;
use URI;
use HTTP::Request::Common; # For fun/test, see comment below.
my $app_id = shift || $ENV{APPLICATION_ID} || die "Give or set APPLICA
+TION_ID\n";
my $app_pass = shift || $ENV{APPLICATION_PASS} || die "Give or set APP
+LICATION_PASS\n";
my $dingus = WWW::Mechanize->new( autocheck => 0,
agent => "MelleMelBot/1.0" );
$dingus->default_header( ABC_APP_ID => $app_id,
IABC_APP_PASSWORD => $app_pass );
my $uri = URI->new("http://<server>:<port>/cdx/abc/gsa/deliverables");
my $post = POST $uri,
Content_Type => "form-data",
Content => [ deliverable_file => [ "real-path-to-sample.xml" ],
file_name => "RRR-xxxxxxxxxx.mmddyyyy-hhmmss.ext",
agency_task_order_parameter => "12345667890",
contractor_service_request_number => "123456780123456
+789",
deliverable_type => "Notification",
data_transaction_file_date => "2016-01-21",
tags => "[tagSample1, tagSample2]" ];
# Peek if you will. Note, default headers are not there yet.
# print $post->as_string;
my $response = $dingus->request( $post );
# $post object is just demo intermediary.
# This could also be $dingus->post( $uri, Content ... );
# Default headers are there because they went through the Mech object.
print $response->request->as_string;