Tcl
Tcl
Debug REST HTTP Request
See more REST Examples
Demonstrates how to generate the HTTP Request (with all headers intact) without actually sending the request.Note: This example requires Chilkat v9.5.0.77 or later.
Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
# This example will connect to the web server, but does not actually send a request.
# When in DebugMode, the request is composed in memory and can be retrieved by calling
# GetLastDebugRequest.
set rest [new_CkRest]
# Connect Code...
# URL: https://test-api.service.hmrc.gov.uk/organisations/vat/MY_HMRC_VRN/returns
set bTls 1
set port 443
set bAutoReconnect 1
set success [CkRest_Connect $rest "test-api.service.hmrc.gov.uk" $port $bTls $bAutoReconnect]
if {$success != 1} then {
puts "ConnectFailReason: [CkRest_get_ConnectFailReason $rest]"
puts [CkRest_lastErrorText $rest]
delete_CkRest $rest
exit
}
# Build the request body...
set json [new_CkJsonObject]
CkJsonObject_UpdateString $json "periodKey" "A001"
CkJsonObject_UpdateNumber $json "vatDueSales" "105.50"
CkJsonObject_UpdateNumber $json "vatDueAcquisitions" "-100.45"
CkJsonObject_UpdateNumber $json "totalVatDue" "5.05"
CkJsonObject_UpdateNumber $json "vatReclaimedCurrPeriod" "105.15"
CkJsonObject_UpdateNumber $json "netVatDue" "100.10"
CkJsonObject_UpdateInt $json "totalValueSalesExVAT" 300
CkJsonObject_UpdateInt $json "totalValuePurchasesExVAT" 300
CkJsonObject_UpdateInt $json "totalValueGoodsSuppliedExVAT" 3000
CkJsonObject_UpdateInt $json "totalAcquisitionsExVAT" 3000
CkJsonObject_UpdateBool $json "finalised" 1
# Add Headers...
CkRest_AddHeader $rest "Accept" "application/vnd.hmrc.1.0+json"
CkRest_AddHeader $rest "Authorization" "Bearer HMRC_ACCESS_TOKEN"
CkRest_AddHeader $rest "Content-Type" "application/json"
set sbRequestBody [new_CkStringBuilder]
CkJsonObject_EmitSb $json $sbRequestBody
# Set DebugMode so that no request is actually sent.
CkRest_put_DebugMode $rest 1
set sbResponseBody [new_CkStringBuilder]
set success [CkRest_FullRequestSb $rest "POST" "/organisations/vat/MY_HMRC_VRN/returns" $sbRequestBody $sbResponseBody]
if {$success != 1} then {
puts [CkRest_lastErrorText $rest]
delete_CkRest $rest
delete_CkJsonObject $json
delete_CkStringBuilder $sbRequestBody
delete_CkStringBuilder $sbResponseBody
exit
}
# Get the exact contents of what would've been sent.
# This includes the HTTP start line, the HTTP request headers, and the request body.
# Given that it's possible for the request body to contain binary data,
# the GetLastDebugRequest fetches into a BinData object.
# In this case, however, our request body contained JSON, so we can
# examine it as a string..
set bdRequest [new_CkBinData]
set success [CkRest_GetLastDebugRequest $rest $bdRequest]
puts "----"
puts [CkBinData_getString $bdRequest utf-8]
puts "----"
# The output for the above case:
# POST /organisations/vat/MY_HMRC_VRN/returns HTTP/1.1
# Accept: application/vnd.hmrc.1.0+json
# Host: test-api.service.hmrc.gov.uk
# Authorization: Bearer HMRC_ACCESS_TOKEN
# Content-Type: application/json
# Content-Length: 281
#
# {"periodKey":"A001","vatDueSales":105.50, ... ,"finalised":true}
#
#
delete_CkRest $rest
delete_CkJsonObject $json
delete_CkStringBuilder $sbRequestBody
delete_CkStringBuilder $sbResponseBody
delete_CkBinData $bdRequest