[ic] posttourl.tag
Ed LaFrance
edl at newmediaems.com
Fri Aug 29 16:43:34 EDT 2003
At 03:01 PM 8/29/2003 -0700, you wrote:
>*snip*
> > Both HTTP::Headers and HTTP::Request have very good manual pages, and
> > the changes to your code will be very simple.
>*snip*
>
>After checking out the man pages on HTTP::Headers, I changed the "-"
>characters in my headers to "_" and after another minor change, IC restarts
>with the tag without any errors. I feel like I'm close to a successful
>POST. I set up a test page to call the posttourl.tag and got a 500 error.
>I noticed the following in my error.log:
>
>
>[29/August/2003:10:18:24 -0700] path/test.html Runtime error: Can't locate
>object method "X_API_COMPATIBILITY_LEVEL" via package "HTTP::Headers" at
>/usr/lib/perl5/site_perl/5.6.0/HTTP/Message.pm line 189.
>
>
>Can anyone interpret that error and point me in the right direction as far
>as fixing it? I'm calling posttourl.tag with the following code:
>
>
>[perl]
> # params are passed to posttourl via cgi to allow
> # fixed string with variable values
> my $page="";
> $CGI->{url}="https://the.url";
> $CGI->{params}="<?xml version='1.0'
> encoding='iso-8859-1'?><request>a bunch
>of XML</request>";
> $CGI->{apicall}="thecall";
> $page.="Connecting to ".$CGI->{url}
> ."?".$CGI->{params}."<br>\n";
>
> $CGI->{C016}="";
> return $page;
>[/perl]
>[seti postonly]
>[posttourl url="[cgi url]" params="[cgi params]" apicall="[cgi apicall]"]
>[/seti]
>
>
>and here's the posttourl.tag:
>
>
>Usertag posttourl Order url params apicall
>Usertag posttourl Routine <<EOR
>use HTTP::Request;
>use HTTP::Headers;
>use LWP::UserAgent;
>sub {
> my ($url,$params,$apicall) = @_;
>
> local($ENV{'HTTPS_VERSION'}) = '3';
> local($ENV{'HTTPS_CERT_FILE'}) = 'xxx.pem';
> local($ENV{'HTTPS_KEY_FILE'}) = 'xxx.key';
>
> my $request = new HTTP::Request('POST' => $url);
> $request->content_type('application/x-www-form-urlencoded');
> $request->content($params);
> $request->content_length(length($params));
> $request->X_API_COMPATIBILITY_LEVEL(305);
> $request->X_API_SESSION_CERTIFICATE('sensitive');
> $request->X_API_DEV_NAME('sensitive');
> $request->X_API_APP_NAME('sensitive');
> $request->X_API_CERT_NAME('sensitive');
> $request->X_API_CALL_NAME($apicall);
> $request->X_API_SITEID(0);
> $request->X_API_DETAIL_LEVEL(0);
>
> my $ua = new LWP::UserAgent;
> my $response = $ua->request($request);
>
> my $page = $response->as_string() . "\n\n\n";
> $page .= $response->code() . "\n";
> $page .= $response->message() . "\n";
>
> return $page;
>}
>EOR
>
>
>- Grant
From perldoc HTTP::Request -
$r = HTTP::Request->new($method, $uri, $header, $content)
Constructs a new "HTTP::Request" object describing a
request on the object "$uri" using method "$method".
The "$uri" argument can be either a string, or a ref-
erence to a "URI" object. The optional $header argu-
ment should be a reference to an "HTTP::Headers"
object. The optional $content argument should be a
string.
From perldoc HTTP::Headers -
$h = HTTP::Headers->new
Constructs a new "HTTP::Headers" object. You might
pass some initial attribute-value pairs as parameters
to the constructor. E.g.:
$h = HTTP::Headers->new(
Date => 'Thu, 03 Feb 1994 00:00:00 GMT',
Content_Type => 'text/html; version=3.2',
Content_Base => 'http://www.perl.org/');
...so in your case I think you would want to do something like:
my $header = HTTP::Headers->new(
X_API_COMPATIBILITY_LEVEL => '305',
X_API_SESSION_CERTIFICATE => 'sensitive',
[etc...]
);
...then pass $header to your http request per the docs.
- Ed L.
===============================================================
New Media E.M.S. Technology Solutions for Business
463 Main St., Suite D eCommerce | Consulting | Hosting
Placerville, CA 95667 edl at newmediaems.com
(530) 622-9421 http://www.newmediaems.com
(866) 519-4680 Toll-Free (530) 622-9426 Fax
===============================================================
More information about the interchange-users
mailing list