Lua Requires Chilkat v11.0.0+
Lua
Parse Multipart Binary Http Response
See more HTTP Examples
This example demonstrates how to parse an HTTP response that is multipart and contains a binary file, such as a .zip or .pdf.Chilkat Lua Downloads
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()
-- ...
-- Insert code here to construct some kind of HTTP request.
-- this example is to show how to parse a particular kind of response.
-- ...
-- ...
-- Send the request (whatever it may be in your case) to get the HTTP response object.
local resp = chilkat.HttpResponse.new()
local success = http:http_sreq("www.somedomain.com", 443, true, req, resp)
if not success then
print(http.last_error_text)
return
end
-- Get the response body (which is expected to be binary)
local respBody = chilkat.BinData.new()
resp:get_body_bd(respBody)
-- For this example, the response body contains something like this:
-- ------=_Part_21302_2029949381.1547401515443
-- Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
-- Content-Transfer-Encoding: 8bit
-- Content-ID: <rootpart@ws.jboss.org>
--
-- <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header></env:Header><env:Body>...</env:Body></env:Envelope>
-- ------=_Part_21302_2029949381.1547401515443
-- Content-Type: application/octet-stream
-- Content-Transfer-Encoding: binary
-- Content-Id: <fileArchivio-7d302908-4d64-43d3-bf4e-79ce806d43b3@ws.jboss.org>
--
-- BINARY_CONTENT_HERE...
--
-- ------=_Part_21302_2029949381.1547401515443--
--
-- Load it into a Chilkat MIME object.
local mime = chilkat.Mime.new()
success = mime:load_mime_bd(respBody)
if not success then
print(mime.last_error_text)
return
end
local numParts = mime.num_parts
if numParts < 2 then
print("Expected multipart MIME with at least 2 sub-parts.")
return
end
-- Get the 1st sub-part, which is the XML.
local part0 = chilkat.Mime.new()
mime:part_at(0, part0)
-- Should be OK because we checked NumParts above..
local xmlStr = part0:get_body_decoded()
print(xmlStr)
print("----")
-- Save the 2nd part to a file. (It is a .zip file in our test case..)
local part1 = chilkat.Mime.new()
mime:part_at(1, part1)
success = part1:save_body("qa_output/attachedZip.zip")
-- Alternatively, we could extract the binary data to a BinData and use elsewhere..
local zipData = chilkat.BinData.new()
success = part1:get_body_bd(zipData)
success = zipData:write_file("qa_output/attachedZip_again.zip")
print("OK.")