Skip to main content

Response:getData()

Get the response body content as a string from the HTTP response.

Signature

getData(): string

Returns

string - The response body content as a string

Description

The getData() method retrieves the response body content from an HTTP response. The content is always returned as a string, regardless of the original format (JSON, XML, plain text, HTML, etc.).

Examples

Basic Usage

-- Make a GET request and get the response data
local response = Request("https://api.example.com/users"):get()
local userData = response:getData()
print("User data: " .. userData)

Working with JSON Data

-- Get JSON response data
local response = Request("https://api.example.com/posts/1"):get()
local jsonData = response:getData()

-- jsonData will be a string like: "{\"id\":1,\"title\":\"Sample Post\",\"body\":\"Content\"}"
print("Raw JSON: " .. jsonData)

-- Note: You would need a JSON parser to convert this string to a Lua table
-- For example (if you have a JSON parser available):
-- local parsedData = json.decode(jsonData)
-- print("Post title: " .. parsedData.title)

Handling XML Responses

-- Get XML response data
local response = Request("https://api.example.com/data.xml"):get()
local xmlData = response:getData()

-- xmlData will contain XML content as a string
if xmlData and xmlData ~= "" then
print("XML data received: " .. xmlData)
-- You would need an XML parser to process this data
end

Error Response Data

-- Make a request that might fail
local response = Request("https://api.example.com/invalid"):get()
local statusCode = response:getResponseCode()

if statusCode ~= 200 then
-- Get error details from response body
local errorData = response:getData()
if errorData and errorData ~= "" then
print("Error details: " .. errorData)
else
print("No error details provided")
end
end

POST Request Response Data

-- Create a resource and get the response
local response = Request("https://api.example.com/users")
:setParameter("name", "John Doe")
:setParameter("email", "john@example.com")
:post()

local status = response:getResponseCode()
local responseData = response:getData()

if status == 201 then
print("User created successfully!")
print("Created user data: " .. responseData)
else
print("Failed to create user. Status: " .. status)
if responseData then
print("Error: " .. responseData)
end
end

Empty Response Handling

-- Handle responses that might be empty
local response = Request("https://api.example.com/delete/123"):delete()
local status = response:getResponseCode()
local data = response:getData()

if status == 204 then
-- No content response
print("Delete successful (no content returned)")
if data == "" or not data then
print("Response is empty as expected")
end
elseif status == 200 then
print("Delete successful with response: " .. data)
else
print("Delete failed with status: " .. status)
end

Processing Different Content Types

-- Check Content-Type header if available (this would require accessing response headers)
-- For now, we can detect common patterns in the data
local response = Request("https://api.example.com/data"):get()
local data = response:getData()

if data and data ~= "" then
-- Detect JSON format
if string.sub(data, 1, 1) == "{" or string.sub(data, 1, 1) == "[" then
print("Received JSON data")
-- Process as JSON
-- Detect XML format
elseif string.find(data, "^<%?xml") or string.find(data, "^<[^>]+>") then
print("Received XML data")
-- Process as XML
-- Detect HTML format
elseif string.find(data, "^<html") or string.find(data, "^<!DOCTYPE") then
print("Received HTML data")
-- Process as HTML
else
print("Received plain text data")
-- Process as plain text
end

print("Data length: " .. string.len(data) .. " characters")
else
print("No data received")
end

Large Response Handling

-- Handle potentially large responses
local response = Request("https://api.example.com/large-data"):get()
local data = response:getData()

if data then
local dataSize = string.len(data)
print("Received " .. dataSize .. " characters of data")

if dataSize > 10000 then
print("Large response detected - first 100 characters:")
print(string.sub(data, 1, 100) .. "...")
else
print("Complete response:")
print(data)
end
end

Common Response Content Types

Content TypeExample DataUsage
application/json{"key":"value"}REST APIs, modern web services
text/plainSimple text responseStatus messages, logs
text/html<html><body>...</body></html>Web pages, error pages
application/xml<?xml version="1.0"?><root>...</root>SOAP APIs, XML data
text/csvname,age,city\nJohn,30,NYCData export, spreadsheets

Notes

  • Response data is always returned as a string, regardless of the original format
  • Empty responses return an empty string "" (common with 204 status codes)
  • Error responses (4xx, 5xx) may contain useful error information in the response body
  • Large responses may consume significant memory - consider processing in chunks if needed
  • You may need additional parsing libraries to work with JSON, XML, or other structured formats
  • Always check if the response is empty before processing to avoid errors