The end result is a XML file going into their web service. They really don't say much about the formatting/protocol. Based upon the samples, it looks like a regular HTML POST operation to me.
I think your comments below might make it simplier on my side to get the data over to their server. Once I get the data there, getting data back from them is pretty straightfoward as it is a XML-based result.
I was originally looking at using the WEBFORM_setvar functions to build up the POSTDATA fields to feed into the http_post_xml function.
(This is a resend of the message as it went to Scott directly.. not sure why...)
The flow Scott describes below is found in his EXAMPLE7 that is part of the LIBHTTP package. Looks good to me.
-----Original Message-----
From: Scott Klement [mailto:rpg400-l@xxxxxxxxxxxxxxxx]
Sent: Tuesday, July 09, 2013 4:25 PM
To: RPG programming on the IBM i (AS/400 and iSeries)
Cc: tegger@xxxxxxxxxxx
Subject: Re: http_url_post_xml and REST
Hello Jay,
You say this isn't a big deal, but to me, it's huge. If I don't know how you are SUPPOSED to send the data, I can't tell you how to code the same thing in HTTPAPI.
The manual for CURLOPT_POSTFIELDS says that if you pass an array, it'll use a multipart/form-data encoding. I found that, here:
http://php.net/manual/en/function.curl-setopt.php
That's the critical piece of information that we didn't have before...
HTTPAPI has a multipart/form-data encoder as well, but it works differently because this technique is often used to upload files, and RPG's strings (at least, at the time I wrote this support) are too small to work nicely with file uploads. So what you do is use the encoder to build a temporary file in the IFS, and then you can upload that file.
This is off the top of my head, I don't have time to actually code it up and test it right now, but hopefully will get you going in the right direction.
http_tempfile() returns a temporary (unique) filename in the IFS.
http_mfd_encoder_open() lets you build a multipart/form-data encoded document in any IFS filename. We'll use the temporary one we generate with http_tempfile() for this.
http_mfd_encoder_addvar_s() can be used to add small strings to the encoded data. http_mfd_encoder_addvar() can be used (with pointer
support) to add larger strings.
http_mfd_encoder_addstmf() can be used to add a document from the IFS (i.e. your XML document).
http_mfd_encoder_close() frees up temporary memory that was used during the encoding process. So you'd do something like this:
// get temporary file name
filetopost = http_tempfile();
// create multipart/form-data encoder
// in temporary IFS file
enc = http_mfd_encoder_open( filetopost
: 'multipart/form-data');
// add code and api_key
http_mfd_encoder_addvar_s( enc
: 'code'
: '[YOUR CODE]');
http_mfd_encoder_addvar_s( enc
: 'api_key'
: '[YOUR KEY]');
// add XML document
http_mfd_encoder_addstmf( enc
: 'data'
: '/path/to/import.xml'
: 'application/xml');
// finished encoding!
http_mfd_encoder_close(enc);
// now do post:
rc = http_url_post_stmf( '
http://the-url-goes-here'
: filetopost
: fileforresult
: 60
: *omit
: 'multipart/form-data' );
// delete temp file
unlink(filetopost);
// handle errors
if rc <> 1;
// handle error
endif;
... etc ...
does that help?
On 7/9/2013 3:04 PM, tegger@xxxxxxxxxxx wrote:
They're using curl_exec and a few curl_setopt functions to build it up in memory.
$ch = curl_init ($urltopost);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $datatopost);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$returndata = curl_exec ($ch);
This piece is not a big deal.
We don't have PHP on the iseries, so it has to go through RPG. I have your LIBHTTP on the system now. Just trying to link it all together.
Jay
----- Original Message -----
From: "Scott Klement" <rpg400-l@xxxxxxxxxxxxxxxx>
To: "RPG programming on the IBM i (AS/400 and iSeries)" <rpg400-l@xxxxxxxxxxxx>
Sent: Tuesday, July 9, 2013 4:01:52 PM
Subject: Re: http_url_post_xml and REST
Hello,
The sample code you provided just creates an array in a PHP script. It
does not send it anywhere... presumably, there's code later in the
program that does the actual POST.
Can you show us that code? That will help me understand what this is doing.
-SK
On 7/9/2013 2:38 PM, tegger@xxxxxxxxxxx wrote:
<?php
$urltopost = "https://[ServerName]/orders/api/add_order";
$datatopost = array (
"code" => "[YOUR CODE]",
"api_key" => "[YOUR KEY]",
"data" => file_get_contents("import.xml"),
);
As an Amazon Associate we earn from qualifying purchases.