1
A
回答
5
與11.5.1開始有內置的支持,以可控的方式使用REST Web服務。但既然你不在那個版本上,我現在將保留爲。
除非升級是一種選擇,你可以做幾件事情:
呼叫一個OS程序HTTP像捲曲或wget的
如何做到這一點正是將取決於選擇的效用,操作系統版本等等。還有人建議os更新可能會改變行爲。
此外,你應該看看錯誤重定向等之前這樣做。調用OS會創建第二個進程,因此可能會影響系統資源。只有在考慮到這些因素的情況下才能使用。
另一方面它很容易和快速。 Curl也非常靈活,並且可以幫助您使用任何標題或其他內容。
您也可以直接調用curl庫來代替。請注意,在這種情況下,您將嚴重依賴mempointers和其他c-like結構!
PROCEDURE curl:
DEFINE INPUT PARAMETER pcUrl AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER pcResponse AS LONGCHAR NO-UNDO.
DEFINE VARIABLE cCommand AS CHARACTER NO-UNDO.
/* -s is for silent use - show no errors or feedback on the screen */
cCommand = "curl -s " + pcUrl + " > /tmp/curl.txt".
OS-COMMAND NO-CONSOLE VALUE(cCommand).
COPY-LOB FROM FILE "/tmp/curl.txt" TO pcResponse .
END.
DEFINE VARIABLE lc AS LONGCHAR NO-UNDO.
run curl("http://www.google.com/", OUTPUT lc).
MESSAGE STRING(SUBSTRING(lc,1,100)) VIEW-AS ALERT-BOX.
使用.NET類
我在.net中沒有的知識,所以我不能幫你這個代碼。您將不得不研究如何在.Net中調用Web服務,然後將其「翻譯」爲ABL。這僅適用於Windows - 進程不支持Mono或其他操作系統中的.net。
推出自己的使用套接字
從無恥被盜例如:Progress Knowledgebase。
DEFINE VARIABLE vcHost AS CHARACTER INITIAL "localhost" NO-UNDO.
DEFINE VARIABLE vcPort AS CHARACTER INITIAL "8080" NO-UNDO.
DEFINE VARIABLE vhSocket AS HANDLE NO-UNDO.
CREATE SOCKET vhSocket.
vhSocket:CONNECT('-H ' + vcHost + ' -S ' + vcPort) NO-ERROR.
IF vhSocket:CONNECTED() = FALSE THEN
DO:
MESSAGE "Connection failure" VIEW-AS ALERT-BOX.
MESSAGE ERROR-STATUS:GET-MESSAGE(1) VIEW-AS ALERT-BOX.
RETURN.
END.
ELSE
MESSAGE "Connect"
VIEW-AS ALERT-BOX.
vhSocket:SET-READ-RESPONSE-PROCEDURE('getResponse').
/* supposes there is an webspeed app called yourapp.w that receives param1, param2, param3 */
RUN PostRequest (
INPUT '/scripts/cgiip.exe/WService=wsbroker1/yourApp.w',
INPUT 'param1=value¶m2=value¶m3=value'
).
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.
/*
*PUT HERE THE CODE TO MANIPULATE THE ANSWER
*/
END.
PROCEDURE PostRequest:
DEFINE VARIABLE vcRequest AS CHARACTER.
DEFINE VARIABLE mRequest AS MEMPTR.
DEFINE INPUT PARAMETER postUrl AS CHAR.
/* URL that will send the data. It must be all the path after the server. IE:/scripts/cgiip.exe/WService=wsbroker1/myApp.htm */
DEFINE INPUT PARAMETER postData AS CHAR.
/* Parameters to be sent in the format paramName=value¶mName=value¶mName=value */
vcRequest =
'POST ' +
postUrl +
' HTTP/1.0~r~n' +
'Content-Type: application/x-www-form-urlencoded~r~n' +
'Content-Length:' + string(LENGTH(postData)) +
'~r~n' + '~r~n' +
postData + '~r~n'.
MESSAGE vcREquest
VIEW-AS ALERT-BOX.
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.
相關問題
- 1. Soap客戶端使用Rest Web服務
- 2. 如何創建Rest Web服務客戶端和服務器
- 3. 使用Java以WSDL創建Web服務客戶端
- 4. 創建Java Web服務客戶端
- 5. 出錯創建Web服務客戶端
- 6. 爲web服務創建客戶端
- 7. 創建Web服務客戶端的NoSuchMethodError
- 8. 從eclipse創建Web服務客戶端
- 9. 創建REST客戶端API
- 10. 編寫REST Web服務客戶端
- 11. REST Web服務的JavaScript/jQuery客戶端
- 12. 創建服務器/服務客戶端
- 13. 使用PHP SOAP從Web服務創建客戶端Sage X3
- 14. 如何使用apache cxf創建web服務客戶端?
- 15. 使用共享類型創建Web服務和客戶端
- 16. 使用JDK1.5創建Web服務客戶端
- 17. 使用REST客戶端調用multipart/form-data其他Web服務
- 18. .net客戶端使用Axis2 Web服務
- 19. 在客戶端使用web服務asp.net
- 20. WCF客戶端使用PHP web服務
- 21. ASP.NET Web API,Web服務發現和客戶端創建
- 22. Java Web服務客戶端
- 23. Soap Web服務客戶端
- 24. Web服務客戶端Java
- 25. Python web服務客戶端
- 26. Java Web服務客戶端:
- 27. Web服務 - 客戶端類
- 28. java web服務客戶端
- 29. Web服務wcfstorm客戶端
- 30. Android客戶端Web服務