GET 요청 보내기 (http.get)
선언
HTTP 상태 코드, 응답 헤더 JSON 텍스트, 응답 본문 = http.get(URL [, 제한 시간(초), 요청 헤더, URL ESCAPE 안 함 ])
선언(이름 있는 인수)
20250625부터 지원하며, 진행률 인수는 20260402 이후 버전에서 지원합니다.
HTTP 상태 코드, 응답 헤더 JSON 텍스트, 응답 본문 = http.get{
url = URL;
timeout = 제한 시간(초);
headers = 요청 헤더;
params = Query 인수;
download_file = 성공한 요청의 응답 본문을 저장할 파일 경로;
progress = 진행률 콜백 함수;
progress_interval_ms = 진행률 콜백 간격(밀리초);
}
매개변수
- URL
문자열. 요청할 URL 주소입니다. 이 메서드는 기본적으로 URL을 퍼센트 escape 처리합니다. 필요하지 않으면 URL ESCAPE 안 함 인수 설명을 참조하십시오. - 제한 시간(초)
실수, 선택 사항. 요청 제한 시간이며 단위는 초, 기본값은 10입니다. - 요청 헤더
테이블, 선택 사항. 전송할 요청의 헤더 정보이며 형식은 {field1 = value1, field2 = value2, ...}, 기본값은 {}입니다. - Query 인수
테이블, 선택 사항. 전송할 요청의 Query 인수이며 형식은 {field1 = value1, field2 = value2, ...}, 기본값은 {}입니다. - 성공한 요청의 응답 본문을 저장할 파일 경로
문자열, 선택 사항. 이 인수가 있으면 요청에 성공한 뒤 응답 본문으로 저장된 파일 경로를 반환합니다. - 진행률 콜백 함수
함수, 선택 사항. 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 프로토콜의 GET 메서드로 네트워크 리소스를 요청합니다.
이 함수는 리소스를 디스크에 저장하지 않습니다. 큰 네트워크 리소스를 다운로드하려면 http.download를 사용하는 것이 좋습니다.
이 함수는 실행을 양보할 수 있으며, 반환되기 전에 다른 스레드가 실행 기회를 얻을 수 있습니다.
서버 프로토콜 버전이 HTTP/1.0 또는 HTTP/0.9이면 httpGet 메서드를 대신 사용할 수 있습니다.
응답 본문 = httpGet(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.get("https://httpbin.org/get?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.get{
url = "https://httpbin.org/get";
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";
["你好"] = "世界";
};
}
if code == 200 then -- 반환된 상태 코드가 HTTP_OK이면
sys.alert(body)
end
참고: 위 코드에서는 이 장에서 설명하지 않는 함수인 sys.alert를 사용합니다.
http.get을 래핑하여 공인 IP를 가져오는 예제
function get_ip()
local done = false
thread.dispatch(function()
while (true) do
if (done) then
sys.toast("", -1)
return
else
sys.toast("正在获取 IP 地址...", device.front_orien())
end
sys.msleep(2000)
end
end)
while (true) do
local c, h, b = http.get("https://ip.chinaz.com/?ts="..tostring(sys.rnd()), 60)
if (c==200) then
sys.toast("", -1)
done = true
return b:match('您的本机IP地址:(%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?)')
end
end
end
--
-- 위 코드를 스크립트 맨 앞에 복사한 뒤 스크립트에서 사용합니다
sys.alert(get_ip())
참고: 위 코드에서는 이 장에서 설명하지 않는 함수인 sys.alert, sys.toast, sys.msleep, sys.rnd, thread.dispatch, device.front_orien을 사용합니다.