/*********************************************************
File : httppostGoogleSearch.p
Desc: Call a Google Search web-service using sockets
Progress version: v.9.x, v.10.x
*********************************************************/
DEFINE VARIABLE vcHost AS CHARACTER INITIAL "api.google.com" NO-UNDO.
DEFINE VARIABLE vcPort AS CHARACTER INITIAL "80" NO-UNDO.
DEFINE VARIABLE stringToSearch AS CHARACTER NO-UNDO.
DEFINE VARIABLE vhSocket AS HANDLE NO-UNDO.
stringToSearch = "Progress Software".
CREATE SOCKET vhSocket.
vhSocket:CONNECT('-H ' + vcHost + ' -S ' + vcPort) NO-ERROR.
IF vhSocket:CONNECTED() = FALSE THEN DO:
MESSAGE "Connection failure" SKIP
ERROR-STATUS:GET-MESSAGE(1) VIEW-AS ALERT-BOX.
RETURN.
END.
vhSocket:SET-READ-RESPONSE-PROCEDURE('getResponse').
RUN PostRequest.
WAIT-FOR READ-RESPONSE OF vhSocket.
vhSocket:DISCONNECT() NO-ERROR.
DELETE OBJECT vhSocket.
QUIT.
/*********************************************************/
PROCEDURE getResponse:
DEFINE VARIABLE vcWebResp AS CHARACTER NO-UNDO.
DEFINE VARIABLE lSucess AS LOGICAL NO-UNDO.
DEFINE VARIABLE mResponse AS MEMPTR NO-UNDO.
IF vhSocket:CONNECTED() = FALSE THEN do:
MESSAGE 'Not Connected' VIEW-AS ALERT-BOX.
RETURN.
END.
lSucess = TRUE.
DO WHILE vhSocket:GET-BYTES-AVAILABLE() > 0:
SET-SIZE(mResponse) = vhSocket:GET-BYTES-AVAILABLE() + 1.
SET-BYTE-ORDER(mResponse) = BIG-ENDIAN.
vhSocket:READ(mResponse,1,1,vhSocket:GET-BYTES-AVAILABLE()).
vcWebResp = vcWebResp + GET-STRING(mResponse,1).
END.
SET-SIZE(mResponse) = 0.
/*
*PUT HERE THE CODE TO MANIPULATE THE ANSWER
*/
OUTPUT TO googleResponse.html.
PUT UNFORMATTED vcWebResp.
OUTPUT CLOSE.
END.
/*********************************************************/
PROCEDURE PostRequest:
DEFINE VARIABLE vcRequest AS CHARACTER NO-UNDO.
DEFINE VARIABLE mRequest AS MEMPTR NO-UNDO.
DEFINE VARIABLE mData AS CHARACTER NO-UNDO.
mData =
'' + 'rn'.
vcRequest =
'POST /search/beta2 HTTP/1.0' + 'rn' +
'Accept: /' + 'rn' +
'TE: trailers' + 'rn' +
'Host: ' + vcHost + ':' + vcPort + 'rn' +
'Cache-Control: no-cache' + 'rn' +
'Connection: TE' + 'rn' +
'Pragma: no-cache' + 'rn' +
'SOAPAction: "urn:GoogleSearchAction"' + 'rn' +
'User-Agent: Progress 4GL Client' + 'rn' +
'Content-Length: ' + STRING(LENGTH(mData)) + 'rn' +
'Content-Type: text/xml; charset=UTF-8' + 'rn' +
'' + 'rn' + mData.
SET-SIZE(mRequest) = 0.
SET-SIZE(mRequest) = LENGTH(vcRequest) + 1.
SET-BYTE-ORDER(mRequest) = BIG-ENDIAN.
PUT-STRING(mRequest,1) = vcRequest .
vhSocket:WRITE(mRequest, 1, LENGTH(vcRequest)).
END PROCEDURE.
/*********************************************************/