HTTP 요청
웹 리소스를 가져와 보세요.
HTTP 요청은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
socket.http 모듈
LuaSocket은 socket.http에 고수준 HTTP 클라이언트를 제공합니다. 이 클라이언트는 원시 TCP를 기반으로 하지만 요청 형식, 헤더, 청크 디코딩을 대신 처리합니다.
일반 TCP를 통해 HTTP/1.1을 사용합니다. HTTPS를 사용하려면 LuaSec의 동반 모듈인 ssl.https가 필요합니다.
local http = require("socket.http")
print(http.PORT)간단한 GET
가장 간단한 형식은 URL을 받아 본문, 상태 코드, 응답 헤더, 상태 줄을 반환합니다.
200 상태 코드는 성공을 뜻합니다. 본문이 nil이면 HTTP 오류가 아니라 전송 계층 오류입니다.
local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)상태 확인하기
본문을 신뢰하기 전에 항상 숫자로 된 code를 확인하십시오. 404도 본문을 반환합니다. 그 본문은 오류 페이지이지만 호출 자체는 TCP 수준에서 성공한 것입니다.
네 번째 반환 값은 "HTTP/1.1 200 OK"와 같은 상태 줄 문자열이며, 로깅에 유용합니다.
local body, code, headers, status = http.request(url)
if code == 200 then
process(body)
else
print("unexpected:", status)
end헤더 살펴보기
반환된 headers table의 키는 소문자로 변환되어 있으므로 서버가 어떤 대소문자를 사용했는지와 관계없이 headers["content-type"]으로 읽을 수 있습니다.
일반적인 항목으로는 content-length, content-type, 리디렉션에 사용하는 location이 있습니다.
local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])일반 요청 형식
table을 http.request에 전달하면 메서드, 사용자 지정 헤더, 요청 본문을 제공하는 원천, 응답을 저장하는 수신처를 완전히 제어할 수 있습니다.
이 형식은 본문이 아닌 1과 코드, 헤더, 상태를 반환합니다. 수신처를 통해 본문을 직접 수집해야 합니다.
local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
url = "http://example.com/",
sink = ltn12.sink.table(chunks)
}POST 보내기
POST의 경우 method = "POST"를 설정하고, 본문을 제공하는 source와 content-length를 지정하십시오. ltn12.source.string 도우미는 Lua 문자열을 원천으로 감쌉니다.
페이로드에 맞게 content-type을 설정하십시오. 예를 들어 application/json을 사용할 수 있습니다.
local body = "{\"name\":\"Lua\"}"
http.request{
url = url,
method = "POST",
source = ltn12.source.string(body),
headers = {
["content-type"] = "application/json",
["content-length"] = tostring(#body)
}
}ltn12로 본문 수집하기
LuaSocket은 ltn12 필터를 통해 데이터를 스트리밍합니다. 수신처는 청크를 받아 처리하고, ltn12.sink.table(t)은 청크를 table에 추가한 다음 table.concat으로 합칠 수 있게 합니다.
이 스트리밍 방식은 대용량 다운로드에서 모든 내용을 한 번에 버퍼링하지 않으므로 메모리 사용량을 낮게 유지합니다.
local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)사용자 지정 요청 헤더
headers table을 통해 인증, 사용자 에이전트 또는 쿠키를 추가하십시오. LuaSocket이 예상하는 방식에 맞게 키는 소문자로 작성해야 합니다.
예를 들어 베어러 토큰이나 사용자 지정 user-agent를 보내 서버가 클라이언트를 올바르게 식별하도록 할 수 있습니다.
http.request{
url = url,
headers = {
["authorization"] = "Bearer " .. token,
["user-agent"] = "lua-client/1.0"
}
}리디렉션 따라가기
기본적으로 socket.http는 GET 요청의 리디렉션을 자동으로 따라갑니다. 요청 table에서 redirect = false를 설정하면 이를 비활성화하고 3xx 응답을 직접 살펴볼 수 있습니다.
자동으로 따라가기를 끄면 headers["location"]을 읽어 다음 URL을 확인하십시오.
local body, code, headers = http.request{
url = url,
redirect = false
}
if code == 301 then print("moved to", headers["location"]) end시간 제한과 HTTPS
http.TIMEOUT = 10으로 HTTP 호출의 전역 시간 제한을 설정하십시오. 그렇지 않으면 응답하지 않는 다운로드가 영원히 작업을 차단할 수 있습니다.
socket.http는 암호화되지 않은 통신만 지원하므로 https:// URL에는 LuaSec의 require("ssl.https")를 사용하십시오. 이 모듈의 인터페이스는 socket.http와 유사합니다.
local http = require("socket.http")
http.TIMEOUT = 10
-- for TLS:
local https = require("ssl.https")
local body, code = https.request("https://example.com/")오류 처리
두 가지 오류 계층을 구분하십시오. 전송 오류가 발생하면 nil과 "connection refused" 또는 "timeout"과 같은 오류 문자열이 반환됩니다.
애플리케이션 오류가 발생하면 4xx 또는 5xx 코드와 함께 본문이 반환됩니다. 견고한 코드는 먼저 nil 반환 여부를 확인한 다음 상태 코드에 따라 분기합니다.
local body, code = http.request(url)
if not body then
print("transport error:", code)
elseif code >= 400 then
print("http error:", code)
end빠른 점검
간단한 URL 형식의 http.request가 반환하는 값을 떠올려 보십시오.
복습
socket.http 모듈을 학습했습니다. 본문, 상태 코드, 헤더를 반환하는 간단한 GET 요청부터 ltn12 싱크와 소스를 사용하는 일반적인 테이블 형식, POST 본문, 사용자 지정 헤더, 리디렉션, 시간 제한까지 살펴보았습니다.
또한 전송 오류(nil)와 HTTP 상태 오류를 구분하고, HTTPS에는 LuaSec의 ssl.https가 필요하다는 것도 확인했습니다. 이로써 원시 TCP에서 HTTP까지 이어지는 네트워킹 학습을 마쳤습니다.
자주 묻는 질문
“HTTP 요청” 강의는 무료인가요?
네 — “HTTP 요청” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“HTTP 요청”에서 뭘 배우나요?
웹 리소스를 가져와 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“HTTP 요청” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.