Sample code for 30+ languages & platforms
SQL Server Requires Chilkat v11.0.0+

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

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    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