POST 요청 보내기 (http.post)
선언
HTTP 상태 코드, 응답 헤더 JSON 텍스트, 응답 본문 = http.post(URL [, 제한 시간(초), 요청 헤더, 요청 본문 데이터, URL ESCAPE 안 함 ])
선언(이름 있는 인수)
20250625부터 지원하며, 진행률 인수는 20260402 이후 버전에서 지원합니다.
HTTP 상태 코드, 응답 헤더 JSON 텍스트, 응답 본문 = http.post{
url = URL;
timeout = 제한 시간(초);
headers = 요청 헤더;
params = Query 인수;
-- 아래 요청 본문 인수는 함께 사용할 수 없으며 우선순위는 multipart > data > json > upload_file입니다
multipart = 요청 본문 multipart 폼;
data = 요청 본문 데이터;
json = 요청 본문 JSON;
upload_file = 요청 본문 업로드 파일 경로;
download_file = 성공한 요청의 응답 본문을 저장할 파일 경로;
progress = 진행률 콜백 함수;
progress_interval_ms = 진행률 콜백 간격(밀리초);
}
매개변수
- URL
문자열. 요청할 URL 주소입니다. 이 메서드는 기본적으로 URL을 escape 처리합니다. 필요하지 않으면 URL ESCAPE 안 함 인수 설명을 참조하십시오. - 제한 시간(초)
실수, 선택 사항. 요청 제한 시간이며 단위는 초, 기본값은 10입니다. - 요청 헤더
테이블, 선택 사항. 전송할 요청의 헤더 정보이며 형식은 {field1 = value1, field2 = value2, ...}, 기본값은 {}입니다. - Query 인수
테이블, 선택 사항. 전송할 요청의 Query 인수이며 형식은 {field1 = value1, field2 = value2, ...}, 기본값은 {}입니다. - 요청 본문 데이터
문자열, 선택 사항. post로 전송할 내용이며 기본값은 빈 문자열입니다.
20250625 테이블이면 application/x-www-form-urlencoded 방식으로 인코딩하여 전송합니다. - 요청 본문 multipart 폼
테이블, 선택 사항. post로 전송할 multipart 폼 데이터이며 형식은 {field1 = value1, field2 = value2, ...}, 기본값은 {}입니다. - 요청 본문 JSON
테이블, 선택 사항. application/json 방식으로 인코딩하여 전송합니다. - 요청 본문 업로드 파일 경로
문자열, 선택 사항. 파일 데이터를 요청 본문으로 직접 전송합니다. - 성공한 요청의 응답 본문을 저장할 파일 경로
문자열, 선택 사항. 이 인수가 있으면 요청에 성공한 뒤 응답 본문으로 저장된 파일 경로를 반환합니다. - 진행률 콜백 함수
함수, 선택 사항. 20260402 이후 버전에서 지원합니다. 요청 업로드 또는 다운로드 진행률이 바뀔 때 호출되며 콜백 함수의 첫 번째 인수는 현재 진행률 정보입니다. - 진행률 콜백 간격(밀리초)
정수, 선택 사항. 20260402 이후 버전에서 지원합니다. 진행률 콜백의 호출 간격을 밀리초 단위로 제어합니다. - URL ESCAPE 안 함
불리언, 선택 사항. true이면 URL을 escape하지 않고 바로 요청합니다. 기본값은 false입니다.
URL을 직접 escape하는 방법은 lcurl 모듈의 easy:escape와 easy:unescape를 참조하십시오.
반환값
- HTTP 상태 코드
정수. 이번 요청의 http 상태 코드를 반환하며 요청 시간이 초과되면 -1을 반환합니다. - 응답 헤더 JSON 텍스트
문자열 또는 nil. 요청이 완료되면 JSON 형식의 헤더 정보를 반환하며 요청 시간이 초과되면 nil을 반환합니다. - 응답 본문
문자열 또는 nil. 요청이 완료되면 응답 내용을 반환합니다. 응답 본문을 파일에 저장했다면 이 값은 파일 경로이며, 요청 시간이 초과되면 nil을 반환합니다.
설명
HTTP/1.1 프로토콜의 POST 메서드로 네트워크에 데이터를 전송합니다.
이 함수는 실행을 양보할 수 있으며, 반환되기 전에 다른 스레드가 실행 기회를 얻을 수 있습니다.
서버 프로토콜 버전이 HTTP/1.0 또는 HTTP/0.9이면 다음을 사용할 수 있습니다.
응답 본문 = httpPost(URL, 문자열형 요청 본문 데이터, 제한 시간(초))
위 메서드로 대신합니다.
진행률 콜백 함수가 받는 info 구조는 다음과 같습니다.
{
count_of_bytes_sent = 전송한 바이트 수;
count_of_bytes_expected_to_send = 전송 예정 바이트 수;
count_of_bytes_received = 수신한 바이트 수;
count_of_bytes_expected_to_receive = 수신 예정 바이트 수;
}
예제
local code, res_headers, body = http.post("https://httpbin.org/post?hello=world&你好=世界", 15, {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)", -- IE8 요청 시뮬레이션
["Cookie"] = "a=1; b=2; c=3"; -- Cookie도 함께 제출
}, "需要发送过去的数据")
if code == 200 then -- 반환된 상태 코드가 HTTP_OK이면
sys.alert(body)
end
참고: 위 코드에서는 이 장에서 설명하지 않는 함수인 sys.alert를 사용합니다.
예제(이름 있는 인수)
local code, res_headers, body = http.post{
url = "https://httpbin.org/post";
timeout = 15;
headers = {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; -- IE8 요청 시뮬레이션
["Cookie"] = "a=1; b=2; c=3"; -- Cookie도 함께 제출
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
data = "需要发送过去的数据";
}
if code == 200 then -- 반환된 상태 코드가 HTTP_OK이면
sys.alert(body)
end
참고: 위 코드에서는 이 장에서 설명하지 않는 함수인 sys.alert를 사용합니다.
POST 폼 제출 예제
local c, h, r = http.post('https://httpbin.org/post', 60, {}, 'name=alice&email=alice%40example.com')
if (c == 200) then
sys.alert(r, 0, '提交成功')
else
if (c == -1) then
sys.alert('请求失败,请检查网络连接', 0, '连接超时')
else
sys.alert('错误代码 #'..c..'\n'..r, 0, 'HTTP 错误')
end
end
참고: 위 코드에서는 이 장에서 설명하지 않는 함수인 sys.alert를 사용합니다.