PureBasic
PureBasic
curl POST with JSON Input and JSON Output
See more CURL Examples
Demonstrates running a simple curl command with JSON input and JSON output.Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpCurl.pb"
Procedure ChilkatExample()
success.i = 0
; Run the following curl command
; curl -X POST https://httpbin.org/post \
; -H "Content-Type: application/json" \
; -d '{
; "title": "foo",
; "body": "bar",
; "userId": 1
; }'
; The backslashes at the end of lines are not required. Chilkat ignores them if present.
sbTargetCurl.i = CkStringBuilder::ckCreate()
If sbTargetCurl.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppendLn(sbTargetCurl," curl -X POST https://httpbin.org/post \")
CkStringBuilder::ckAppendLn(sbTargetCurl," -H " + Chr(34) + "Content-Type: application/json" + Chr(34) + " \")
CkStringBuilder::ckAppendLn(sbTargetCurl," -d '{")
CkStringBuilder::ckAppendLn(sbTargetCurl," " + Chr(34) + "title" + Chr(34) + ": " + Chr(34) + "foo" + Chr(34) + ",")
CkStringBuilder::ckAppendLn(sbTargetCurl," " + Chr(34) + "body" + Chr(34) + ": " + Chr(34) + "bar" + Chr(34) + ",")
CkStringBuilder::ckAppendLn(sbTargetCurl," " + Chr(34) + "userId" + Chr(34) + ": 1")
CkStringBuilder::ckAppendLn(sbTargetCurl," }'")
httpCurl.i = CkHttpCurl::ckCreate()
If httpCurl.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Run the curl command.
success = CkHttpCurl::ckDoYourThing(httpCurl,CkStringBuilder::ckGetAsString(sbTargetCurl))
If success = 0
Debug CkHttpCurl::ckLastErrorText(httpCurl)
CkStringBuilder::ckDispose(sbTargetCurl)
CkHttpCurl::ckDispose(httpCurl)
ProcedureReturn
EndIf
responseJson.i = CkJsonObject::ckCreate()
If responseJson.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::setCkEmitCompact(responseJson, 0)
CkHttpCurl::ckGetResponseJson(httpCurl,responseJson)
statusCode.i = CkHttpCurl::ckStatusCode(httpCurl)
Debug "response status code: " + Str(statusCode)
Debug CkJsonObject::ckEmit(responseJson)
; Output:
; response status code: 200
; {
; "args": {},
; "data": "{\r\n \"title\": \"foo\",\r\n \"body\": \"bar\",\r\n \"userId\": 1\r\n }",
; "files": {},
; "form": {},
; "headers": {
; "Content-Length": "96",
; "Content-Type": "application/json",
; "Host": "httpbin.org",
; "X-Amzn-Trace-Id": "Root=1-69e8db8b-459b3bdf7b7a3bc749184968"
; },
; "json": {
; "body": "bar",
; "title": "foo",
; "userId": 1
; },
; "origin": "123.222.222.222",
; "url": "https://httpbin.org/post"
; }
; ----------------------------------------------------------------------------------
; Another example:
; curl -X POST https://postman-echo.com/post \
; -H "Content-Type: application/json" \
; -d '{"foo":"bar"}'
targetCurl.s = "curl -X POST https://postman-echo.com/post -H " + Chr(34) + "Content-Type: application/json" + Chr(34) + " -d '{" + Chr(34) + "foo" + Chr(34) + ":" + Chr(34) + "bar" + Chr(34) + "}'"
; Run the curl command.
success = CkHttpCurl::ckDoYourThing(httpCurl,targetCurl)
If success = 0
Debug CkHttpCurl::ckLastErrorText(httpCurl)
CkStringBuilder::ckDispose(sbTargetCurl)
CkHttpCurl::ckDispose(httpCurl)
CkJsonObject::ckDispose(responseJson)
ProcedureReturn
EndIf
CkHttpCurl::ckGetResponseJson(httpCurl,responseJson)
statusCode = CkHttpCurl::ckStatusCode(httpCurl)
Debug "response status code: " + Str(statusCode)
Debug CkJsonObject::ckEmit(responseJson)
; Output:
; response status code: 200
; {
; "args": {},
; "data": {
; "foo": "bar"
; },
; "files": {},
; "form": {},
; "headers": {
; "host": "postman-echo.com",
; "content-length": "13",
; "content-type": "application/json",
; "x-forwarded-proto": "https",
; "accept-encoding": "gzip, br"
; },
; "json": {
; "foo": "bar"
; },
; "url": "https://postman-echo.com/post"
; }
CkStringBuilder::ckDispose(sbTargetCurl)
CkHttpCurl::ckDispose(httpCurl)
CkJsonObject::ckDispose(responseJson)
ProcedureReturn
EndProcedure