GETURI has been around for along time (over 15 years!), and has been used by thousands of companies for just about any purpose. It is similar to the cURL command used on other platforms to make requests to web services which in turn return data.
But, what some don't realize is that GETURI has an API interface, an ILE interface as well as a command interface.
The source below is a simple example of how to use the GETURI command to retrieve the current time calling a web service using the API interface, and following using the new ILE interface:
****************************************************************
/COPY GETURI/QCOPYSRC,GETURICOPY
****************************************************************
D GetUriRG pr extpgm('GETURIRG')
D PR_In like(GetUri_In)
D PR_Out like(GetUri_Out)
D PR_Head like(GetUri_Head)
D PR_Data like(GetUri_Data)
D PR_MsgCd like(GetUri_MsgCd)
D PR_Msg like(GetUri_Msg)
****************************************************************
/free
EXSR $LoadParms;
EXSR $GETURI;
*INLR = *ON;
//***************************************************************
//* Call GETUI
//***************************************************************
BegSr $GETURI;
GetUriRG(GetUri_In:GetUri_Out:GetUri_Head:GetUri_Data:
GetUri_MsgCd:GetUri_Msg);
EndSr;
//***************************************************************
//* Load Parameters to call GETURIRG
//***************************************************************
BegSr $LoadParms;
Clear GetUri_In;
GI_URI = 'http://webservice.theknot.com/Time/GetTime.asmx/currentTime';
GI_OutType = '*RETURN';
GI_SprHead = '*YES';
EndSr;
/end-free
**FREE
ctl-opt DFTACTGRP(*NO) ACTGRP('GETURI') BNDDIR('GETURI');
// Imports
/COPY QCOPYSRC,GETURICOPY
/COPY QCOPYSRC,P.GETURI
// Work Variables
dcl-s rc int(10);
dcl-s errMsg varchar(256);
geturi_resetValues();
geturi_setValue('gi_uri':'webservice.theknot.com/Time/GetTime.asmx/currentTime');
geturi_setValue('gi_outtype':'*RETURN');
rc = geturi_call(GetUri_Out:GetUri_Head:GetUri_MsgCd:GetUri_Msg:errMsg);
The important pieces to recognize with this are:
If we run our program in debug, we can see the value that is returned:
Evaluate Expression
Previous debug expressions
> EVAL geturi_out
GETURI_OUT =
....5...10...15...20...25...30...35...40...45...50...55...60
1 '<?xml version="1.0" encoding="utf-8"?> <string xmlns="http:'
61 '//webservice.theknot.com/Time">09/15/2014 10:48</string> '
121 ' '
181 ' '
241 ' '
301 ' '
361 ' '
421 ' '
481 ' '
541 ' '
601 ' '
More...
Debug . . .
F3=Exit F9=Retrieve F12=Cancel F16=Repeat find F19=Left F20=Right
F21=Command entry F23=Display output
We see that the web service we're using returns XML containing the current time.
If we want to see the headers, we can simply evaluate GetUri_Head:
Evaluate Expression
Previous debug expressions
> EVAL geturi_head
GETURI_HEAD =
....5...10...15...20...25...30...35...40...45...50...55...60
1 'HTTP/1.1 200 OK Connection: keep-alive Date: Mon, 15 Sep 2'
61 '014 15:48:34 GMT Server: Microsoft-IIS/6.0 ServerID: AUSWE'
121 'B14 X-Powered-By: ASP.NET Set-Cookie: temp=T20141509154834'
181 '524964; path=/; domain=theknot.com;expires=Fri 22-May-2020 1'
241 '3:00:00 GMT; X-AspNet-Version: 2.0.50727 Cache-Control: pr'
301 'ivate, max-age=0 Content-Type: text/xml; charset=utf-8 Con'
361 'tent-Length: 116 '
421 ' '
481 ' '
541 ' '
601 ' '
More...
Debug . . .
F3=Exit F9=Retrieve F12=Cancel F16=Repeat find F19=Left F20=Right
F21=Command entry F23=Display output
Because the information returned will be small, we can choose to return the data to our program.
The XML can then be parsed using your favorite XML parser.
If the data returned would be quite large, it may be a better idea to return the data to a stream file instead of the program. Then once it is retrieved you can pass the name of your stream file to your XML parser so it can do all the dirty work and get you some usable information.