Sample code for 30+ languages & platforms
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

PureBasic
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