Response:getData()
Возвращает содержимое тела ответа HTTP в виде строки.
Сигнатура
getData(): string
Возвращаемое значение
string — содержимое тела ответа в виде строки
Описание
Метод getData() извлекает содержимое тела ответа из HTTP-ответа. Содержимое всегда возвращается в виде строки, независимо от исходного формата (JSON, XML, простой текст, HTML и т. д.).
Примеры
Базовое использование
-- 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)
Работа с данными JSON
-- 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)
Обработка XML-ответов
-- 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
Данные ответа с ошибкой
-- 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-запроса
-- 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
Обработка пустых ответов
-- 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
Обработка различных типов содержимого
-- 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
Обработка больших ответов
-- 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
Распространённые типы содержимого ответа
| Тип содержимого | Пример данных | Использование |
|---|---|---|
application/json | {"key":"value"} | REST API, современные веб-сервисы |
text/plain | Simple text response | Сообщения о состоянии, журналы |
text/html | <html><body>...</body></html> | Веб-страницы, страницы ошибок |
application/xml | <?xml version="1.0"?><root>...</root> | SOAP API, XML-данные |
text/csv | name,age,city\nJohn,30,NYC | Экспорт данных, электронные таблицы |
Примечания
- Данные ответа всегда возвращаются в виде строки, независимо от исходного формата
- Пустые ответы возвращают пустую строку
""(часто бывает с кодами состояния 204) - Ответы с ошибками (4xx, 5xx) могут содержать полезную информацию об ошибке в теле ответа
- Большие ответы могут потреблять значительный объём памяти — при необходимости обрабатывайте их по частям
- Вам могут понадобиться дополнительные библиотеки парсинга для работы с JSON, XML или другими структурированными форматами
- Всегда проверяйте, что ответ не пустой, перед его обработкой, чтобы избежать ошибок