home *** CD-ROM | disk | FTP | other *** search
- /* --------------------------------------------------------------------
- Call the HTTP submit program to send a request to the local server.
- This is not a stand-alone program, it is to be used as a subroutine.
- First attempts to connect with HTTPS and, if fails, falls back to HTTP.
-
- Arguments:
- http = the command string to send
- user = name of a user with admin privileges
- password = password for that user
- begin_at = the string to look for before echoing the response
- end_at = the string to look for to stop echoing the response
- -------------------------------------------------------------------- */
-
- http = arg(1)
- user = arg(2)
- password = arg(3)
- begin_at = arg(4)
- end_at = arg(5)
-
- call RxFuncAdd 'SysTempFileName', 'RexxUtil', 'SysTempFileName'
- call RxFuncAdd 'SysFileDelete', 'RexxUtil', 'SysFileDelete'
-
- /* Submit the request, capturing output to a temporary file. */
-
- filename = SysTempFileName("h?????.rsp")
- retries = 0
-
- do until \((rc = 3) & (retries < 5))
- if length(user) > 0 then
- '@submit "'http'" -p443 -u'user':'password' >'filename '2>&1'
- else
- '@submit "'http'" -p443 >'filename
-
- if (rc = 3) | (rc = 403) then do
- if length(user) > 0 then
- '@submit "'http'" -u'user':'password' >'filename '2>&1'
- else
- '@submit "'http'" >'filename
- end
-
- retries = retries+1
- end
-
- /* Read the response and extract only the relevant portion. */
-
- begun = 0
- ended = 0
- doall = 0
- inhdr = 1
-
- call stream filename, 'C', 'open read'
-
- /* The first line should always be an HTTP response */
-
- response = linein(filename)
- if pos("HTTP/", response) != 1 then do
- doall = 1
- say response
- end
- else do
- parse value response with protocol status message
-
- if \(status = 200) then do
- say message
- call stream filename, 'C', 'close'
- call SysFileDelete filename
- return
- end
- end
-
- do while \ended & lines(filename)
- response = linein(filename)
-
- if length(response) = 0 then do
- inhdr = 0
- if length(begin_at) = 0 then
- begun = 1
-
- if \doall then
- iterate
- end
-
- if doall then
- say response
- else if begun then do
- if pos(end_at, response) > 0 then
- ended = 1
- else do
-
- /* remove the HTML markup tags */
- answer = ''
- do while length(response) > 0
- parse value response with keep '<' discard '>' response
- answer = answer keep
- end
-
- /* substitute common chars */
-
- do while pos("&", answer) > 0
- loc = pos("&", answer);
- answer = delstr(answer, loc, 5);
- answer = insert("&", answer, loc);
- end
-
- do while pos(" ", answer) > 0
- loc = pos(" ", answer);
- answer = delstr(answer, loc, 6);
- answer = insert(" ", answer, loc);
- end
-
- /* echo the response from the server to the console */
- say strip(answer)
- end
- end
- else if pos(begin_at, response) > 0 then do
- begun = 1
- end
- end
-
- /* Remove the file containing the response. */
-
- call stream filename, 'C', 'close'
- call SysFileDelete filename
-
- return
-
-
-