Visual FoxPro
Visual FoxPro
HttpPostJson2Async Example
Demonstrates use of the HttpPostJson2Async method.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcJsonBody
LOCAL loTask
LOCAL loResp
LOCAL lnStatusCode
LOCAL loJson
lnSuccess = 0
* This requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code
* See PostJson2 Example for the synchronous equivalent of this example.
loHttp = CreateObject('Chilkat.Http')
* Sends a POST equivalent to the following CURL command:
* curl -X POST https://sandbox.plaid.com/institutions/get \
* -H 'content-type: application/json' \
* -d '{
* "client_id": String,
* "secret":String,
* "count": Number,
* "offset": Number
* }'
* Suppress some default headers that would automatically added..
loHttp.AcceptCharset = ""
loHttp.UserAgent = ""
loHttp.AcceptLanguage = ""
loHttp.AllowGzip = 0
lcJsonBody = '{"client_id": "PLAID_CLIENT_ID", "secret":"PLAID_SECRET", "count": 10, "offset": 0}'
loTask = loHttp.PostJson2Async("https://sandbox.plaid.com/institutions/get","application/json",lcJsonBody)
IF (loHttp.LastMethodSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loHttp
CANCEL
ENDIF
* Start the background task.
lnSuccess = loTask.Run()
IF (NOT lnSuccess) THEN
? loTask.LastErrorText
RELEASE loTask
RELEASE loHttp
CANCEL
ENDIF
* The application is now free to do anything else
* while the HTTP POST is in progress
* For this example, we'll simply sleep and periodically
* check to see if the HTTP POST is finished.
DO WHILE loTask.Finished <> 1
* Sleep 100 ms.
loTask.SleepMs(100)
ENDDO
* When we get here, the task is either finished successfully or not, or was canceled/aborted.
* If the task was "canceled", it was canceled prior to actually starting. This could
* happen if the task was canceled while waiting in a thread pool queue to be scheduled by Chilkat's
* background thread pool scheduler.
* If the task was "aborted", it indicates that it was canceled while running in a background thread.
* The ResultErrorText will likely indicate that the task was aborted.
* If the task "completed", then it ran to completion, but the actual success/failure of the method
* is determined by getting the result of the underlying method call.
* A task status of 7 indicates completion.
IF (loTask.StatusInt <> 7) THEN
? "Task did not complete."
? "task status: " + loTask.Status
RELEASE loTask
RELEASE loHttp
CANCEL
ENDIF
* When called synchronously, the PostJson2 method returns an HTTP response object,
* unless the method failed and there was no response to be had.
* Check to see if PostJson2 method failed (and thus there is no response object).
IF (loTask.TaskSuccess = 0) THEN
? "The underlying task failed, and there is no HTTP response object."
? "The LastErrorText for the underlying method call is:"
? loTask.ResultErrorText
RELEASE loTask
RELEASE loHttp
CANCEL
ENDIF
* To get the HTTP response object, create a new instance and load it with the result from the task.
loResp = CreateObject('Chilkat.HttpResponse')
loResp.LoadTaskResult(loTask)
RELEASE loTask
lnStatusCode = loResp.StatusCode
? "Response status code = " + STR(lnStatusCode)
* Examine the JSON response..
loJson = CreateObject('Chilkat.JsonObject')
loJson.Load(loResp.BodyStr)
loJson.EmitCompact = 0
? "JSON Response Body:"
? loJson.Emit()
RELEASE loHttp
RELEASE loResp
RELEASE loJson