%HTTP_CLIENT_POST

Send a request to post a document to a server

WTSupported in traditional Synergy on Windows
WNSupported in Synergy .NET on Windows
USupported on UNIX
VSupported on OpenVMS
status = %HTTP_CLIENT_POST(uri, [timeout], send_handle, send_length, receive_handle, 
&        receive_length, error, [headers], [log_file], [protocols], [ciphers], [cert_file], [CA_file], 
&        [HTTP_RELURI][, version])

Return value

status

Returns 0 if successful or an error number if unsuccessful.

Arguments

uri

The absolute URI of the document to send to the HTTP server. (a)

timeout

(optional) The number of seconds to wait from the time a request is sent (after the connection to the server) until a response is received from the server. The default is 0, which specifies wait forever. (n)

send_handle

The static memory handle of the document to send to the HTTP server. (D_HANDLE)

send_length

The length of the document to send to the HTTP server. (n)

receive_handle

The static memory handle of the document received in response to the post request. (D_HANDLE)

receive_length

The length of the document received in response to the post request. (n)

error

Returned with an error message if status is nonzero. Otherwise, it is blank. (a)

headers

(optional) An array of one or more HTTP header strings. Each string has the form header_name[:value]. ([*]a)

log_file

(optional) The name and location of a log file to log HTTP packet contents. (a)

protocols

(optional) One or more SSL protocol versions in effect, separated by a plus sign (for example, SSLVER_TLS1_1+SSLVER_TLS1_2): (n)

SSLVER_ALL = All protocols are available.

SSLVER_TLS1_2 = TLS version 1.2 (default)

SSLVER_SSL2 = SSL version 2 (deprecated)

SSLVER_SSL3 = SSL version 3 (deprecated)

SSLVER_TLS1 = TLS version 1.0 (deprecated)

SSLVER_TLS1_1 = TLS version 1.1 (deprecated)

Important

We recommend using TLS 1.2 for secure sites. If a protocol version lower than SSLVER_TLS1_1 is specified, an "Invalid SSL protocol specified" error will occur.  

ciphers

(optional) A cipher list that specifies the encryption methods in effect. (a)

cert_file

(optional) The name of the client certificate file. (a)

CA_file

(optional) the name of a file containing certificate authorities that the client trusts. (a)

HTTP_RELURI

(optional) If passed, the absolute URI is translated and sent as a relative path in the HTTP request. If not passed, the absolute URI is sent with the path exactly as specified. (n)

version

(optional) A string that contains the HTTP version number to be placed in the document header. The default version number is 1.0. (a)

Discussion

%HTTP_CLIENT_POST sends a “post” request to an HTTP or HTTPS server, which enables the client to send the specified document to the server. The response from the server is returned in the form of a memory handle.

The value of uri determines what type of connection will be made to the server. If you pass an HTTP URI, the client establishes an HTTP connection. If you pass an HTTPS URI, the client establishes an SSL connection. See Using the HTTP document transport API for details about the uri syntax, including information on the automatic escaping of special characters.

If receive_handle and receive_length have a value of 0, %HTTP_CLIENT_POST allocates a memory handle for you. If, instead of 0, you pass a valid memory handle, that handle is used, but %HTTP_CLIENT_POST resizes the handle to the size of the received document. In either case, it’s your responsibility to free any memory used by this routine.

For most applications, the standard default HTTP headers will work as provided. However, some HTTP servers require extra header values to process the HTTP message properly. The headers argument therefore enables you to add or modify headers for client POST requests. If you pass in a header name that was previously set, the last header value passed for that name will be the one sent in the HTTP message. An individual HTTP header can have a maximum of 499 bytes with %HTTP_CLIENT_POST. Headers longer than 499 bytes will be truncated. If this limitation is a problem, you can use %HTTP_POST, which has a header size limit of 2048, instead. An HTTP header array is limited to a maximum of 100 elements, and each element can have up to 2048 bytes with %HTTP_POST.

Passing a log_file causes both the HTTP request packet and the HTTP response packet to be logged to the specified file. This logging feature is available primarily for debugging purposes and should not normally be turned on in a secure production environment. Logs of a request packet include the HTTP method (in this case, POST), the URI, the HTTP version, all HTTP headers, and the body of the HTTP packet. Logs of a response packet include the HTTP version, status, reason, all HTTP headers, and the body of the HTTP packet. Log entries are always appended to an existing log file. If the log file does not exist, it is created. A log file can only be created on a local drive; remote drives are not supported.

If ciphers is not specified, the ciphers designated by the cipher list format value DEFAULT are in effect. See Ciphers for more detailed information and a list of supported ciphers.

If specified, cert_file and CA_file must be the names of existing files in PEM or DER format. A PEM certificate file may contain both the certificate and private key. If it doesn’t contain the private key, the Synergy HTTP document transport API will load a PEM-based key file whose name is derived by appending “key.pem” to the end of the certificate filename. For example, for a certificate file named test.der or test.pem, the API will load a key file named testkey.pem. If an authentication error occurs, the error is returned and the connection is terminated.

Important

If you pass an HTTPS URI but don’t specify a CA_file, server verification will be turned off. Because this poses a security risk, we recommend that you not do it unless you only need encryption without verification.

Chunked encoding is supported with HTTP versions of 1.1 and higher.

Examples

clear timeout, errormsg
URI = "http://hostname/filename.ext"
logfile = "c:\post.log"
headerArray[1] = "Content-Type:text/xml"
.
.
.
; Declare and fill the send memory handle and length with the document
; to post to the HTTP server
rtn = %http_client_post(URI, timeout, send_hndl, send_len, rec_hndl,
  &   rec_len, errormsg, headerArray, logfile)
.
.
.
; Test rtn and rec_hndl, rec_len for a valid response document

See also %HTTP_SERVER_CREATE Examples.