GETURI Release Notes

v1.00b - Original

v1.01b - Changed size of data parameter from 256 to 2048 characters.

v1.02b - Added option to specify *STMF for data parameter and use

a stream file to send the request data parameters.

v1.03b - Added parameters to specify userid and password for

basic authorization.

v1.04b - Changed command to not show password in job log.

Internal processing updates.

v1.05b - HOST parameter wasn't being used. Fixed.

Authentication was adding an extra line feed causing errors

when making requests to some systems. Fixed.

v1.06b - Added ability to include Cookie: header. See parameter help

for location of RFC and formatting of this data.

v1.07b - Added SSL Timeout parameter to specify a timeout value for

the SSL Handshake operation

v1.08b - Added DEBUG paramter. When specified as *YES, the HTTP

header used will be written to the stream file


v1.09b - Changed the length of the cookie parameter from 1024 to

4096, the max specified in the RFC.

v1.10b - When doing a POST and specifying the URI data in a stream

file, size was limited to 32k. Changed this to be

unlimited. GET is still limited to 32k.

v1.11 - Removed beta status. Added REFERER parameter that allows

a user to specify a Referer that will be placed in the

HTTP header request.

v1.12 - Added timeout functionality. There is now a TIMEOUT

parameter on the GETURI command. The default is 30 seconds.

A special thanks to Paul Nicolay for assistance with

this portion of the utility.

v1.13 - Fixed Accept parameter. GETURI was always using text/html

and ignoring this parameter.

v2.00b - Beta version. Please be sure to test this version if you

were using a previous version in production for

compatibility with your applications.

Added ability to simulate an HTML form file upload.

Specify UPFILE(*YES) and you will be prompted with fields

to fill in the qualified file name located in the IFS to

upload, the form file field name, and the file content


Fixed debug file so that it won't be garbage if emailed or

FTPed, etc.

Added CONNECTION parameter. This is used to specify a

Connection: value such as Keep-Alive in the header.

Added CLOSE parameter. This parameter allows you to specify

if the connection/socket should be closed after GETURI


v2.01b - Added ability to specify content-type.

Added ability to specify a SOAPAction header.

Removed extra CRLFs from POST actions.

Added a warning message that if the socket read times out

after 1 or more successful reads. The command will still

complete normally, but a warning message will be issued.

v2.02b - Added user defined header/data parmeters. With these you can enter

up to 20 user defined HTTP headers and associated data parameters.

Removed SOAPAction parameter. If you were using this previously

you can use the new user defined header section to include this


Minimum release level is now V4R5.

v3.00b - Added *HEAD as an option for request method.

Added API interface. See documentation for more information on this at:

v3.10b - Added Certificate Password parameter.

Added error checking so errors don't result in a hard halt from the

GETURI command.

v3.20b - Added SSL Application ID parameter. This parameter is to assign

the GETURI application a unique ID that can be used when assigning

trusted certificates to certain applications.

v3.21b - Bug fix on using SSL Application ID parameter. Was allocating storage

incorrectly. Fixed to allocate a default of 4096 bytes using malloc().

v3.22b - Added EBCDIC to ASCII translation table parameter (EATABLE) and

ASCII to EBCDIC translation table parameter (AETABLE).

v3.23b - Increased size of storage allocated for application certificate from

4k to 32k.

v3.24 - Changed program to use the defaults QTCPASC for EATABLE and

QEBCDIC for the AETABLE values if left blank when using the API


Added parameters LOCIP and LOCPORT which allow you to specify a local

IP address and Port to bind the request to.

v3.25 - Updated application to set defaults for GI_CStore to *SYSTEM and

GI_Close to *YES if left blank.

v3.30 - **NOTE**

Updated registration to use Serial Number and Model number.

Removed display to screen only limit from unregistered version. Instead,

temporary keys will be issued to allow unlimited testing for a period of time.

-- Current Users --

Email me a note with your serial number(s) and model number(s) before you

install this version so I can get you a new key.

-- New Users --

Email me and I will get you a temporary key. This temporary key will allow you

to use GETURI with all functionality for a limited period of time. You

need a temporary key or a permanent key to use GETURI.

v3.31 - Fixed small problem with temporary registration key processing.

v3.32 - Fixed bug when errors exist and files aren't closed.

v3.33 - Fixed small bug when using *RETURN in the GETURIRG API

v3.34 - Added SPRHEAD parameter which can be used to supress the HTTP headers from

the result. This option is only valid with output type of *STMF or

*RETURN. If SPRHEAD(*YES) is specified and *STMF is the output type,

the headers will be placed in a file named "xxxxx.hdr" where "xxxxx" is the

file name specified for the output file name. If the API is used there is

now a 3rd parameter to the GETURIRG API call that will contain the headers

if the Supress Headers option is used.

v3.35 - Added UPNAME parameter. This is used when uploading a file (UPFILE(*YES)) and

allows you to name the file that is being uploaded anything you want. If

left as the default of *UPSTMF the stream file used, along with the entire path,

will be used as the filename (same as before this update).

v3.36 - Added CCSID parameter to be used for EBCDIC to ASCII and ASCII to EBCDIC

translations. This was added so the conversion functionality was more like

the TCPIP servers on the iSeries. When left as the default of *TBL, the

EBCDIC and ASCII tables specified will be used instead of the CCSID.

v3.37 - Fixed small bug when supressing headers and using SSL.

v3.38 - Added HTTPHEAD parameter. When specifying *NO no HTTP headers will be sent,

only the data. When *USRHDR is specifyied, only the user specified headers

will be used. Defaults to *YES which will perform as normal.

When specifying *NO or *USRHDR, the POST method must be used.

v3.39 - Fixed small bug where in rare cases when using API the returned data would

be shifted over on 2nd - nth calls.

v3.40 - Fixed bug when using API interface. The Content-length header was not

getting sent in some cases.

v3.41 - Forced Non-Blocking sockets.

Changed HOST parm default to *DFT which will use the domain name in the

request as the host name.

v3.42 - Changed URI parameter length from 128 to 256.

v3.43 - Updated to handle HTTP 1.1 chunked data and content length.

v3.44 - Fixed bug when using GET method and *STMF for input. Was putting data

in the URL and in standard input.

v3.45 - When specifying *DFT for HOST parmater added port to the string if it wasn't

a default port used.

v3.46 - Changed the maximum number of user headers from 20 to 50

v3.47 - Added the DEBUGF parmater in order to allow the user to name the debuf file

whatever they want. This value still defaults to /tmp/geturidebug.txt

and should not cause any conflicts with previous versions.

The new parameter added to the API interface is GI_DebugFile.

v3.48 - Internal updates for RXS.

v3.49 - Updates that possibly closed non-GETURI sockets causing issues with

other applications.

v3.50 - Clean up closing stream files which may have also closed other sockets

v3.51 - Updated return variables for GETURI API from 32767 bytes to

65535 bytes

v4.00 - Registration changes. See installation notes.

v4.01 - Fix to registration. If you received new permanent keys for v4.00, please

email us for a new key before installing.

Changed processing so if specifying a proxy and using basic authentication user

id and password it would use the Proxy-Authorization header for proxy


v4.02 - Bug in registration when using GETURI command. API still worked fine, but using

command showed unregistered message after upgrading to v4.00 or v4.01 and

installing new keys.

v4.03 - Added new parameters for Proxy Authentication so they are separate from the Basic

Authentication parameters.

v4.04 - (SP061212) Updated GETURI to handle requests without HTTP headers.

(SP070102) Updated GETURI so Content-Length value is always started

back at zero.

Added *NONE options for HOST and CONTTYPE parameters. When used on either of

these parameters, the header specified as *NONE will not be sent.

v4.05 - Added new parms to GETURIRG API interface. They are as follows:


GetUri_Data - Parameter used to pass up to 65k of data instead of using the

GI_Data parm or a Stream file. To use this, the GI_Data parm must contain

the value of *PARM and the request method must be POST.

GetUri_MsgCd - Message code returned from the GETURIRG API.

C=Completed, D=Diagnostic Messages, E=Error

GetUri_Msg - Message text returned from the GETURIRG API. This is the same

message that is sent to the job log.


These new parms are included in the updated version of the GETURICOPY member.

Added error checking for blank URI.

Fixed bug when content length was zero it wasn't using a zero, instead a blank.

Updated application so that the HTTP headers are always returned in the

GETURI_Head paramater, not just when headers are supressed.

v4.06 - (v4.05 SP) Updated GETURI to throw error when no server is specified

instead of a STRING error.

(v4.05 SP) Added option of *OFF for the DEBUG parameter which will tell

GETURI to not send any messages during the running of the


(v4.05 SP) Changed SSLInitDS to a specific size of 64 bytes (per IBM)

(v4.05 SP) Updated Base64 encoding for userid and password when using

Basic Authentication. Base64 routine was automatically

adding CRLF to strings over 64bytes causing problems

with authentication.

Added new option to use the special value of *STMF for user header (USRHDR)

and a path to an IFS file for the user header data. This will import custom

headers larger that the parameters allow to be entered. Example:

USRHDR((*STMF '/tmp/headtest.txt')

v4.07 - (v4.06 SP) Fixed bug in GETURI when sending a diagnostic error it wasn't

closing files, sockets, etc.

(v4.06 SP) Allowed the value SOCKET to be used for the PROTO (GI_Proto)

parameter to be used when working directly with sockets.

(v4.06 SP) Allowed for parm value of *RETNC on the GI_OutType parm which

stands for "Return by no Translation". This means the data

will be returned without being converted to EBCDIC.

(v4.06 SP) Fixed issue when a colon was part of the URI but after the

server name (ie

Fixed bug when uploading some files was erroring out. Still having issues

with some files (like zip files) when uploaded.

v4.08 - (v4.07 SP) Added ability when using the GETURIRG API to specify a very long

URI in the GetURI_Head parameter. This is done by specifying the

special value of *GETURI_HEAD as the GI_URI parm and then

specifying the long URI in the GetURI_Head parameter.

(v4.07 SP) Updated application so when using a proxy with SSL that it would

use proper methods for communicating with the proxy.

(v4.07 SP) Updated debug file processing where it would error out if code page

1208 was used and the debug file would be blank.

(v4.07 SP) Fixed bug when converted data resulted in DBCS data

(v4.07 SP) Fixed bug when domain name started with a number.

(v4.07 SP) Added more debugging to conversion routines to put error number and

text in job log should an error be encountered.

(v4.07 SP) Fixed bug when converting 1208 to EBCDIC.

(v4.07 SP) Fixed bug when sending zero bytes on a POST.

(v4.07 SP) Fixed bug when sending no headers, an extra CRLF was being added to

the beginning of the data.

(v4.07 SP) Added SOCKET2 value for protocol to treat it more like an older

type socket where it reads until zero bytes are returned.

(v4.07 SP) Added debugging for reads from sockets when DEBUG(*YES).

(v4.07 SP) Fixed processing for protocol type SOCKET. It was stopping reading

if the size of the data returned was less than the size of the

receiver variable. It didn't do this before and was causing

issues with some existing processes.

(v4.07 SP) Added new debugging when DEBUG(*YES) is specified. This will create

a new file with the same name as the debug file, only with the added

extension of log (ie /tmp/geturidebug.txt.log). This file will

show all the processes such as opening files and sockets, closing

files and sockets as well as the values of the parameters passed in.

(v4.07 SP) Update debug file. Bytes read for stream file was incorrect, added

logging for select().

(v4.07 SP) Fixed issue with debug log files getting code page of 37 instead of

code page specified on command.

(v4.07 SP) Fixed bug when reading HTTP 1.1 chunked data. The CRLF at the end of

the data was being included in the results. Also added some more

info on chunked data to the geturidebug.txt.log file.

(v4.07 SP) Error when convering data to 1208 code page and conversion was made

to a DBCS piece of data. Fixed.

(v4.07 SP) Fixed bug when using *PARM data and length was > 32k.

(v4.07 SP) Fixed bug when using CCSID, data was getting converted incorrectly. This

bug only affected those who installed SP120426 which wasn't ever

available to the public.

Updated user header data field size from 128 bytes to 1024 bytes.

SP120812 - Fixed bug when 1 byte of data would get dropped randomly.

Bug when specifying CCSID and user headers, only first user

header would get used. Fixed.

Fixed bug when data started with space.

SP140830 - Fixed issue when not using a proxy and a port was included in

the URL.

Fixed issue when CLOSE was set to *NO. It wasn't resusing sockets.

When using this option if you're specifying HTTP 1.1 by default the

socket will stay open. If you're using HTTP 1.0 you need to specify

keep-alive for the connection and even then not all servers will

work with this.

v4.09 - Added the option to specify *MULTIPARM when using the GETURIRG API for

the GI_Data parameter. This value will allow you to specify data in the

GetUri_Data parameter to be used in a multi-part POST.

Added parameters GI_PContType and GI_PContType to the Geturi_In variable.

these parameters allow you to specify the Content-Type value for the

parameter data and the stream file data, respectivley, when specifying

*MULTIPARM for the GI_Data parameter.

v4.10 - Updated background processing to use unique ID instead of timestamp for

temporary file.

SP141204 - Updated application so that when stream files are created

"other" users would get RWX authority to the files and not

just RX.

SP150424 - Updated application to remove 100 character file name limit.

SP150609 - Updated application so the value of data area GU002DA will contain

the SSL protocol version to use. See

for protocol versions.

SP150701 - Updated application for CCSID conversions to be more efficient and faster.

SP150903 - Compressed debugging info for reading of header information.

v5.00 - Added licensing by date (SaaS) option.

SP151004 - Updated application so when retrieving to a PF the buffer

length was the same as the record length of the file

receiving data.

SP151123 - Fixed issue when reading chunked lengths for HTTP 1.1 data.

SP151201 - Found issue when trying to use GETURI and not send HTTP

headers. Wasn't recognizing *POST as POST method.

SP151221 - Fixed issue when CCSID of input data file was 1208. Would

return error Conversion error. RC(0) errno(3490). Fixed.

v5.10 - Changed all defaults for CCSID and Code Page to 1208.

Updated Base64 processing to use apr_base64_encode API.

v6.00 - If you are using the GETURIRG API you WILL need to recompile

any programs to make sure the new /COPY member GETURICOPY

is brought into your programs.

Increased User Defined Header (GI_UsrHdr) from 30 to

128 bytes.

Increased User Defined Header Data (GI_UsrHdrDta) size

from 1024 to 2048 bytes.

Reduced maximum number of user headers from 50 to 20

v6.10 - Added PATCH request method.

v6.20 - Updated GI_BUser and GI_BPW from 64 to 128 bytes.

v7.00 - Added the ability to turn off SSL Strict Validation. This is done

by changing the value of data area GUSSL01DA to *NO. Any other

value in this data area, or if the data area is deleted,

will result in SSL Strict Validation.

Added new feature that in debug and when you specify SSL(*YES)

the SSL certificate used by the host you are connecting to will

be saved in the IFS as /tmp/<debugfilename>.cer.

v7.01 - Updated to grab content length of data stream file using API.

Updated trace file so loading content length was just a couple lines.

Added more info to trace file such as if it ends abnormally the

total bytes sent vs the total bytes of the file.

v7.10 - Added data area GU003DA that holds the buffer size to use for

reading and writing to and from stream files and sockets.

v8.00 - Fixed issue when using GETURIRG API where GI_CCSID wasn't defaulting

to 1208.

Updated to min OS version of V7R1.

v8.10 - Updated so when EWOULDBLOCK error (errno 3406) was encountered during

HTTP 1.1/SSL connections we would wait until socket was ready.

v8.20 - Updated so when reading non-chunked data and content-length is zero

exit immediately.

v8.21 - Updated process for blocking to reset error count for each successful


v8.30 - Fixed small bug when reading chunked data and system would report a not

ready error.

v8.31 - Fixed issue when using HTTP 1.1 and the data is NOT chunked and the size

was greater than the buffer.

v10.00 - Added option to use GSKit for SSL communications. This is done by setting

the SSLMODE parameter to *GSKIT for the command, or setting GI_SSLMode to

*GSKIT for the API. The default for this parameter is *DFT but in the

future it may change to *GSKIT as IBM seems to be moving away from

supporting the "legacy" SSL APIs.

Added SNI support. GETURI will by default use the host name as the SNI

parameter on SSL connections. This can be overridden using the SNI

parameter on the command or the GI_SNI field in the API. This field is

only valid with using *GSKIT for SSL.

v10.01 - Added data area GUSSL02DA that can be used to tell the system which SSL

APIs to use. The value of *GSKIT will use the GSKit APIs and anything else

will use the standard IBM SSL APIs. This value can also be overridden on the

GETURI command by specifying *IBM for the IBM SSL APIs, or *GSKIT for the


v10.02 - Added code so that if GI_SSLMode isn't passed in it will default to *DFT.

Changed default of data area GUSSL02DA from *DFT to *GSKIT so the GSKit will

be used by default for SSL connections.

SP191004 - Fixed bug when reading chunked data and the 2nd to last

byte read was part of the ending CRLF of the chunked data.

Added more debugging/verification to chunked data reading

to log file.

SP200225 - Fixed issue when sending requests without a path on the URI

and sending query string data.

SP200505 - When using option *STMF data will also be returned in the

GetUri_Out parameter on the call to GETURIRG.

SP200506 - Added code to make sure PF is closed if *FILE output type

is used. Also added logging to the debug file for opening

and closing the PF.

v10.10 - Added F.GETURI service program that contains ILE function used to

call GETURI.

SP200827 - Added check for GSK_WOULD_BLOCK error to reading chunk length.

Added more debugging messages so operations are more clear

as to when errors happen.

v10.11 - Updated to work with files > 2GB.

Updated DEBUG paramter to include the option *ALL. This option

will function as *YES did in previous versions displaying

verbose debugging. The value *YES will now skip most read, write

and stat() function calls to reduce the size of the debug file and

make it easier to read.

SP200911 - Changed HTTP headers Content-type and Content-length to

Content-Type and Content-Length because apparently one server

is looking for headers as case sensitive. *tsk tsk*

SP200928- Updated to accept Content-Type header values using HTTP 1.1

larger than 2GB (updated field size to 64 bit int).

v11.00 - Change of parmeter sizes and types to Varying. This now allows returning

up to 1MB of data into your application. If you are using the GETURIRG

API this will require recompilation (at the very least) of your

those applications.

It is STRONGLY encouraged that all new development is done using the ILE

functions included in the F.GETURI service program as well as converting

existing applications to use the same.

Removed EBCDIC to ASCII translation using tables and QDXLATE

GI_URI increased to 65535 bytes.

GI_UsrHdr increased to 2048 bytes.

GI_UsrHdrDta increased to 65535 bytes.

GI_Data increased to 65535 bytes.

Changed default of PROTOV from 1.0 to 1.1.

Allowed any method on command. (Already allowed in API and ILE functions).

Change display of data when using * as return type on GETURI command to

use a stream file instead of a PF.

Changed PORT parameter default from 80 to *DFT which will automatically use

port 80 if SSL is set to *NO or 443 if SSL is set to *YES.

Removed proxy support. This will not be added back in unless for some reason

proxy technologies are updated and used as normal vs NAT.

Any port specified on the URI will be igored.

Added more debug details to trace files.

Added #geturi_getHeader() function to F.GETURI to allow retrieval of HTTP header


Added #geturi_getResponseCode() to F.GETURI to allow retrieval of HTTP

response code (and optionally the response text).

Removed use of data area GU003DA for stream file read buffer size. Defaults

to the size of the buffer in the application now.

Removed COOKIE paramter. Use User Defined Headers for this if required.

Added source PF QRPGLESRC to GETURI library which includes a small sample program

that uses the ILE functions included in the F.GETURI service program.

SP210120 - Updated #geturi_resetValues() to initialize all variables

not just the GetUri_In data structure.

SP210713 - Updated Content-Type to be set with the content type specified

when upload file (gi_upfile) is *YES.

Increased size of Upload File Content Type (gi_upcont) from 64 to


SP211119 - Changed METHOD on GETURI command to 10 characters and added

*DELETE as an option.

SP211121 - Added option *ALL to Suppress Headers (SPHREAD) so that when

your output is a stream file the .hdr file is not created.

v11.10 - Added option of *STMFRAW for the DATA parameter (or GI_Data) so that when

using a stream file for the POST data it will read and write the data from

the stream file as raw and not do any conversions.

v12.00 - Removed the # from the beginning of all ILE function names for better

compatibility in different code pages.

SP220106 - Updated GET requests so data wouldn't be corrupted.

Allow blank or *NONE for ACCEPT parameter. If so, this header

will not be used.

SP220201 - Fixed issue where if debug wasn't *ON or *ALL error messages

wouldn't be reported when using the GETURI command. Changed

it back to previous behavior where it will send an error

message unless debug is set to *OFF. The value of *NO will

still send errors as well.