Openedge has built-in operators for processing SOAP services, but without a simple instruction for GET / POST. However, it does have a read / write mechanism to certain sockets. So you can use this to create an HTTP post routine or, for that matter, routines to handle any other socket based protocol.
There is a routine - http.p - that will do the GET for you. Lets you see how socket programming works, if nothing else. You should be able to easily modify it to perform a simple POST, but using SSL or obtaining authentication can take a lot of work. In this case, it might be easier for you to just exit CURL.
http.p was used to be available from freeframework.org, but I just checked and this domain has expired, so I posted the code below.
&SCOPED-DEFINE HTTP-NEWLINE CHR(13) + CHR(10) &SCOPED-DEFINE RESPONSE-TIMEOUT 45 DEFINE INPUT PARAMETER pHOST AS CHAR NO-UNDO. DEFINE INPUT PARAMETER pPORT AS CHAR NO-UNDO. DEFINE INPUT PARAMETER pURL AS CHAR NO-UNDO. DEFINE OUTPUT PARAMETER pRESULT AS CHAR NO-UNDO. DEFINE OUTPUT PARAMETER pRESPONSE AS CHAR NO-UNDO. DEFINE OUTPUT PARAMETER pContent AS CHAR NO-UNDO. DEFINE VARIABLE requestString AS CHAR NO-UNDO. DEFINE VARIABLE vSocket AS HANDLE NO-UNDO. DEFINE VARIABLE vBuffer AS MEMPTR NO-UNDO. DEFINE VARIABLE vloop AS LOGICAL NO-UNDO. DEFINE VARIABLE vPackets AS INTEGER NO-UNDO. DEFINE VARIABLE wStatus AS LOGICAL NO-UNDO. ASSIGN requestString = "GET " + pURL + " HTTP/1.0" + {&HTTP-NEWLINE} + "Accept: */*" + {&HTTP-NEWLINE} + "Host: " + phost + {&HTTP-NEWLINE} + {&HTTP-NEWLINE}. CREATE SOCKET vSocket. vSocket:SET-READ-RESPONSE-PROCEDURE ("readHandler",THIS-PROCEDURE). ASSIGN wstatus = vSocket:CONNECT("-H " + phost + " -S " + pport) NO-ERROR. IF wstatus = NO THEN DO: pResult = "0:No Socket". DELETE OBJECT vSocket. RETURN. END. SET-SIZE(vBuffer) = LENGTH(requestString) + 1. PUT-STRING(vBuffer,1) = requestString. vSocket:WRITE(vBuffer, 1, LENGTH(requestString)). SET-SIZE(vBuffer) = 0. ASSIGN vloop = TRUE. DEFINE VAR vstarttime AS INTEGER. ASSIGN vstarttime = etime. WAITLOOP: DO WHILE vloop: PROCESS EVENTS. PAUSE 1. IF vstarttime + ({&RESPONSE-TIMEOUT} * 1000) < ETIME THEN DO: MESSAGE "timed out at " + string(etime - vstarttime) + " msec". vSocket:DISCONNECT(). ASSIGN pResult = "0:Failure". RETURN. END. END. vSocket:DISCONNECT(). DELETE OBJECT vSocket. ASSIGN pResult = "1:Success". ASSIGN pContent = SUBSTRING(pResponse,INDEX(pResponse,{&HTTP-NEWLINE} + {&HTTP-NEWLINE}),-1) . ASSIGN pResponse = SUBSTRING(pResponse,1,INDEX(pResponse,{&HTTP-NEWLINE} + {&HTTP-NEWLINE})) . RETURN. PROCEDURE readHandler: DEFINE VARIABLE bytesAvail AS INTEGER NO-UNDO. DEFINE VARIABLE b AS MEMPTR NO-UNDO. DEFINE VARIABLE lastBytes AS INTEGER NO-UNDO. IF vSocket:connected() THEN ASSIGN bytesAvail = vSocket:GET-BYTES-AVAILABLE(). IF bytesAvail = 0 THEN DO: ASSIGN vloop = FALSE. RETURN. END. SET-SIZE(b) = bytesAvail + 1. vSocket:READ(b, 1, bytesAvail, 1). ASSIGN pResponse = pResponse + GET-STRING(b,1). SET-SIZE(b) = 0. END PROCEDURE.
source share