SQL Server
SQL Server
URL Encoding Charset in POST Query Params
See more HTTP Examples
Demonstrates how to control the URL encoding charset in POST query params.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- We have the string "MÆRSK".
DECLARE @nameWin1252Encoded nvarchar(4000)
SELECT @nameWin1252Encoded = 'M%E6RSK'
DECLARE @sb int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sb OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @sb, 'DecodeAndAppend', @success OUT, @nameWin1252Encoded, 'url', 'windows-1252'
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
-- We're setting the session log filename so we can see the exact request sent.
EXEC sp_OASetProperty @http, 'SessionLogFilename', 'qa_output/sessionLog.txt'
-- First demonstrate a simple application/x-www-form-urlencoded POST
DECLARE @req int
EXEC @hr = sp_OACreate 'Chilkat.HttpRequest', @req OUT
-- Set the Charset = "utf-8" to cause URL encoding to use utf-8.
EXEC sp_OASetProperty @req, 'Charset', 'utf-8'
EXEC sp_OAMethod @sb, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @req, 'AddParam', NULL, 'name', @sTmp0
EXEC sp_OASetProperty @req, 'HttpVerb', 'POST'
EXEC sp_OASetProperty @req, 'ContentType', 'application/x-www-form-urlencoded'
DECLARE @resp int
EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT
EXEC sp_OAMethod @http, 'HttpReq', @success OUT, 'https://www.chilkatsoft.com/something', @req, @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @sb
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
RETURN
END
-- This is the request that is sent:
-- Notice that utf-8 is used in the query param (the letter 'Æ' is %C3%A6)
-- POST /something HTTP/1.1
-- Host: www.chilkatsoft.com
-- Content-Type: application/x-www-form-urlencoded
-- Content-Length: 15
--
-- name=M%C3%A6RSK
-- ---------------------------------------------------------------
-- Switch to windows-1252
EXEC sp_OASetProperty @req, 'Charset', 'windows-1252'
EXEC sp_OASetProperty @req, 'HttpVerb', 'POST'
EXEC sp_OASetProperty @req, 'ContentType', 'application/x-www-form-urlencoded'
EXEC sp_OAMethod @http, 'HttpReq', @success OUT, 'https://www.chilkatsoft.com/something', @req, @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @sb
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
RETURN
END
-- This is the request that is sent:
-- Notice that windows-1252 is used in the query param (the letter 'Æ' is %E6)
-- POST /something HTTP/1.1
-- Host: www.chilkatsoft.com
-- Content-Type: application/x-www-form-urlencoded
-- Content-Length: 12
--
-- name=M%E6RSK
-- ---------------------------------------------------------------
-- Let's do the same with HttpSReq, switching back to utf-8
EXEC sp_OASetProperty @req, 'Path', '/something'
EXEC sp_OASetProperty @req, 'HttpVerb', 'POST'
EXEC sp_OASetProperty @req, 'ContentType', 'application/x-www-form-urlencoded'
EXEC sp_OASetProperty @req, 'Charset', 'utf-8'
EXEC sp_OAMethod @http, 'HttpSReq', @success OUT, 'www.chilkatsoft.com', 443, 1, @req, @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @sb
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
RETURN
END
-- This is the request that is sent:
-- Notice that utf-8 is used in the query param (the letter 'Æ' is %C3%A6)
-- POST /something HTTP/1.1
-- Host: www.chilkatsoft.com
-- Content-Type: application/x-www-form-urlencoded
-- Content-Length: 15
--
-- name=M%C3%A6RSK
-- ---------------------------------------------------------------
-- Let's do a POST with XML body where the query params are in the HTTP request start line,
-- and the Content-Type is text/xml where the body of the request is XML.
EXEC sp_OASetProperty @req, 'Path', '/something'
EXEC sp_OASetProperty @req, 'HttpVerb', 'POST'
EXEC sp_OASetProperty @req, 'ContentType', 'text/xml'
EXEC sp_OAMethod @req, 'LoadBodyFromString', @success OUT, '<test>123</test>', 'utf-8'
EXEC sp_OASetProperty @req, 'Charset', 'utf-8'
-- Remember... our request object still contains the query param added in the above call to AddParam.
EXEC sp_OAMethod @http, 'HttpSReq', @success OUT, 'www.chilkatsoft.com', 443, 1, @req, @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @sb
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
RETURN
END
-- This is the request that is sent:
-- Notice that utf-8 is used in the query param (the letter 'Æ' is %C3%A6)
-- POST /something?name=M%C3%A6RSK HTTP/1.1
-- Host: www.chilkatsoft.com
-- Content-Type: text/xml
-- Content-Length: 16
--
-- <test>123</test>
EXEC @hr = sp_OADestroy @sb
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
END
GO