Sample code for 30+ languages & platforms
Lua

Send HTTP POST using non-UTF8 such as Windows-1250

See more HTTP Examples

Demonstrates how to specify the character encoding (charset) to be used for the body of an HTTP POST.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local http = chilkat.Http.new()

local req = chilkat.HttpRequest.new()

-- Load a JSON file containing strings with Polish chars.
local json = chilkat.JsonObject.new()
local success = json:load_file("qa_data/json/has_polish_chars.json")
if not success then
    print(json.last_error_text)
    return
end

-- Add the request params expected by the server-side:
req:add_param("tytul", json:string_of("tytul"))
req:add_param("tresc", json:string_of("tresc"))

-- Indicate we wish to explicitly send the charset attribute in the HTTP request header.
req.send_charset = true

-- Send the POST
-- You can send the POST to the URL below.  It will respond with the request body in quoted-printable format.
-- Using quoted-printable, we can easily see the binary bytes for the accented chars.

req.http_verb = "POST"
req.content_type = "application/x-www-form-urlencoded"

local resp = chilkat.HttpResponse.new()
success = http:http_req("https://www.chilkatsoft.com/echoPost.cshtml", req, resp)
if not success then
    print(http.last_error_text)
    return
end

print(http.last_header)
print(resp.body_str)

-- Sample output:

-- --------------------------------------------------
-- POST /echoPost.cshtml HTTP/1.1
-- Host: www.chilkatsoft.com
-- Content-Type: application/x-www-form-urlencoded; charset=utf-8
-- Content-Length: 79
--
-- <pre>tytul=3DPrzyk%C5%82ad&amp;tresc=3DPrzyk%C5%82ad
-- %82oszenie</pre>
-- --------------------------------------------------

-- We can see by the %C5%82 that utf-8 was sent, because %C5%82 is the 2-byte representation of a particular Polish char.

-- -----------------------
-- However.. we can change the charset used for the HTTP request by specifying the request object's charset.

req.send_charset = true
req.charset = "windows-1250"
req.http_verb = "POST"
req.content_type = "application/x-www-form-urlencoded"

success = http:http_req("https://www.chilkatsoft.com/echoPost.cshtml", req, resp)
if not success then
    print(http.last_error_text)
    return
end

print(http.last_header)
print(resp.body_str)

-- Sample output...
-- You can see how the bytes used for the Polish chars are now 1-byte per char (i.e. using Windows-1250)

-- --------------------------------------------------
-- POST /echoPost.cshtml HTTP/1.1
-- Host: www.chilkatsoft.com
-- Content-Type: application/x-www-form-urlencoded; charset=windows-1250
-- Content-Length: 70
--
-- <pre>tytul=3DPrzyk%B3ad&amp;tresc=3DPrzyk%B3ad
-- e</pre>
-- --------------------------------------------------