Response:getResponseCode()
Возвращает код состояния HTTP из ответа.
Сигнатура
getResponseCode(): number
Возвращаемое значение
number — код состояния HTTP (например, 200, 404, 500)
Описание
Метод getResponseCode() возвращает код состояния HTTP из ответа сервера. Коды состояния показывают, был ли HTTP-запрос успешным, завершился ошибкой или требует дальнейших действий.
Примеры
Базовая проверка кода состояния
-- Make a request and check the status code
local response = Request("https://api.example.com/users"):get()
local statusCode = response:getResponseCode()
if statusCode == 200 then
print("Request successful!")
local data = response:getData()
print("Response data: " .. data)
else
print("Request failed with status: " .. statusCode)
end
Комплексная обработка кодов состояния
local response = Request("https://api.example.com/data"):get()
local status = response:getResponseCode()
if status >= 200 and status < 300 then
-- Success responses (2xx)
print("Request successful (2xx)")
local data = response:getData()
print("Data: " .. data)
elseif status >= 300 and status < 400 then
-- Redirection responses (3xx)
print("Redirection received (3xx)")
print("Status: " .. status)
elseif status >= 400 and status < 500 then
-- Client error responses (4xx)
print("Client error (4xx)")
local errorData = response:getData()
if errorData and errorData ~= "" then
print("Error details: " .. errorData)
end
elseif status >= 500 and status < 600 then
-- Server error responses (5xx)
print("Server error (5xx)")
local errorData = response:getData()
if errorData and errorData ~= "" then
print("Server error details: " .. errorData)
end
else
print("Unexpected status code: " .. status)
end
Обработка конкретных кодов состояния
local response = Request("https://api.example.com/users/123"):get()
local status = response:getResponseCode()
if status == 200 then
print("OK - Request successful")
local userData = response:getData()
print("User data: " .. userData)
elseif status == 201 then
print("Created - Resource created successfully")
local newResource = response:getData()
print("New resource: " .. newResource)
elseif status == 204 then
print("No Content - Request successful, no response body")
elseif status == 400 then
print("Bad Request - Invalid request data")
local errorInfo = response:getData()
print("Error: " .. errorInfo)
elseif status == 401 then
print("Unauthorized - Authentication required")
elseif status == 403 then
print("Forbidden - Access denied")
elseif status == 404 then
print("Not Found - Resource does not exist")
elseif status == 500 then
print("Internal Server Error")
local serverError = response:getData()
print("Server error details: " .. serverError)
else
print("Other status: " .. status)
local otherData = response:getData()
if otherData and otherData ~= "" then
print("Response: " .. otherData)
end
end
Коды состояния для конкретных HTTP-методов
-- GET request
local getResponse = Request("https://api.example.com/data"):get()
local getStatus = getResponse:getResponseCode()
if getStatus == 200 then
print("Data retrieved successfully")
elseif getStatus == 404 then
print("Data not found")
end
-- POST request
local postResponse = Request("https://api.example.com/users")
:setParameter("name", "John")
:setParameter("email", "john@example.com")
:post()
local postStatus = postResponse:getResponseCode()
if postStatus == 201 then
print("User created successfully")
local newUser = postResponse:getData()
print("Created user: " .. newUser)
elseif postStatus == 400 then
print("Invalid user data")
elseif postStatus == 409 then
print("User already exists")
end
-- DELETE request
local deleteResponse = Request("https://api.example.com/users/123"):delete()
local deleteStatus = deleteResponse:getResponseCode()
if deleteStatus == 204 then
print("User deleted successfully")
elseif deleteStatus == 404 then
print("User not found")
end
Вспомогательная функция для обработки кодов состояния
function handleResponse(response)
local status = response:getResponseCode()
local data = response:getData()
-- Success (2xx)
if status >= 200 and status < 300 then
print("✓ Request successful (" .. status .. ")")
if data and data ~= "" then
return data
else
return "Success (no content)"
end
end
-- Client errors (4xx)
if status >= 400 and status < 500 then
print("✗ Client error (" .. status .. ")")
if data and data ~= "" then
print("Error details: " .. data)
end
return nil
end
-- Server errors (5xx)
if status >= 500 and status < 600 then
print("✗ Server error (" .. status .. ")")
if data and data ~= "" then
print("Server error: " .. data)
end
return nil
end
print("? Unexpected status: " .. status)
return nil
end
-- Usage
local response = Request("https://api.example.com/data"):get()
local result = handleResponse(response)
if result then
print("Operation successful: " .. result)
else
print("Operation failed")
end
Логика повторных попыток API
function makeRequestWithRetry(url, maxRetries)
local retries = 0
while retries < maxRetries do
local response = Request(url):get()
local status = response:getResponseCode()
-- Success
if status == 200 then
return response:getData()
end
-- Don't retry on client errors (4xx)
if status >= 400 and status < 500 then
print("Client error (" .. status .. "), not retrying")
return nil
end
-- Retry on server errors (5xx)
if status >= 500 and status < 600 then
retries = retries + 1
print("Server error (" .. status .. "), retrying... (" .. retries .. "/" .. maxRetries .. ")")
-- Wait before retrying (you might want to add a delay here)
else
retries = retries + 1
print("Unexpected status (" .. status .. "), retrying... (" .. retries .. "/" .. maxRetries .. ")")
end
end
print("Max retries reached, giving up")
return nil
end
local data = makeRequestWithRetry("https://api.example.com/unstable", 3)
if data then
print("Request succeeded: " .. data)
end
Распространённые коды состояния HTTP
| Код | Категория | Значение | Типичное использование |
|---|---|---|---|
| 200 | Успех | OK | Запрос выполнен успешно |
| 201 | Успех | Created | Ресурс создан |
| 204 | Успех | No Content | Успех, нет тела ответа |
| 400 | Ошибка клиента | Bad Request | Неверные данные запроса |
| 401 | Ошибка клиента | Unauthorized | Требуется аутентификация |
| 403 | Ошибка клиента | Forbidden | Доступ запрещён |
| 404 | Ошибка клиента | Not Found | Ресурс не существует |
| 409 | Ошибка клиента | Conflict | Конфликт ресурса |
| 500 | Ошибка сервера | Internal Server Error | Серверная ошибка |
| 502 | Ошибка сервера | Bad Gateway | Неверный ответ вышестоящего сервера |
| 503 | Ошибка сервера | Service Unavailable | Сервер временно недоступен |
Примечания
- Всегда проверяйте код состояния перед обработкой данных ответа
- Коды состояния стандартизированы для HTTP/1.1 и HTTP/2
- Коды 2xx означают успех, 3xx — перенаправление, 4xx — ошибки клиента, 5xx — ошибки сервера
- Некоторые API могут использовать пользовательские коды состояния или нестандартные значения
- Ответы с ошибками (4xx, 5xx) могут содержать полезную информацию в теле ответа
- Сетевые ошибки или тайм-ауты могут полностью помешать созданию объекта ответа