Gửi yêu cầu GET (http.get)
Khai báo
status, headersJson, body = http.get(URL [, timeoutSec, headers, URLNoEscape ])
Khai báo (đối số có tên)
Hỗ trợ từ phiên bản 20250625; các tùy chọn tiến trình được hỗ trợ từ phiên bản 20260402
status, headersJson, body = http.get{
url = URL;
timeout = timeoutSec;
headers = headers;
params = queryParams;
download_file = savePathIfSuccess;
progress = progressCallback;
progress_interval_ms = progressIntervalMs;
}
Tham số
- URL
Kiểu chuỗi. URL đích. Theo mặc định, URL sẽ được escape theo dạng phần trăm; xem URLNoEscape nếu muốn tắt việc escape. - timeoutSec
Kiểu số, không bắt buộc. Thời gian chờ tính bằng giây. Mặc định: 10. - headers
Kiểu bảng, không bắt buộc. Header yêu cầu có dạng{field1 = value1, ...}. Mặc định:{}. - queryParams
Kiểu bảng, không bắt buộc. Tham số truy vấn có dạng{field1 = value1, ...}. Mặc định:{}. - savePathIfSuccess
Kiểu chuỗi, không bắt buộc. Nếu được đặt, nội dung phản hồi sẽ được lưu vào tệp này và giá trị body trả về sẽ là đường dẫn đó. - progressCallback
Kiểu hàm, không bắt buộc. Hỗ trợ từ phiên bản 20260402. Được gọi khi tiến trình yêu cầu thay đổi; đối số đầu tiên là thông tin tiến trình hiện tại. - progressIntervalMs
Kiểu số nguyên, không bắt buộc. Hỗ trợ từ phiên bản 20260402. Khoảng thời gian giữa các lần gọi lại tiến trình, tính bằng mili giây. - URLNoEscape
Kiểu boolean, không bắt buộc. true = không escape URL. Mặc định: false.
Để tự escape, hãy xemeasy:escapevàeasy:unescapetrong mô-đun lcurl.
Giá trị trả về
- status
Kiểu số nguyên. Mã trạng thái HTTP; trả về -1 khi hết thời gian chờ. - headersJson
Kiểu chuỗi hoặc nil. Header phản hồi ở định dạng JSON; trả về nil khi hết thời gian chờ. - body
Kiểu chuỗi hoặc nil. Nội dung phản hồi, hoặc đường dẫn tệp nếu đã lưu vào tệp; trả về nil khi hết thời gian chờ.
Mô tả
Thực hiện yêu cầu GET bằng HTTP/1.1.
Hàm này không lưu tài nguyên xuống đĩa. Để tải tệp lớn, hãy dùnghttp.download.
Hàm này có thể nhường quyền thực thi; các luồng khác có thể được chạy trước khi hàm trả về.
Nếu máy chủ chỉ hỗ trợ HTTP/1.0 hoặc 0.9, bạn có thể dùnghttpGetthay thế:
body = httpGet(URL, timeoutSec)
Bảng info được truyền cho hàm gọi lại tiến trình có cấu trúc như sau:
{
count_of_bytes_sent = bytesSent;
count_of_bytes_expected_to_send = bytesExpectedToSend;
count_of_bytes_received = bytesReceived;
count_of_bytes_expected_to_receive = bytesExpectedToReceive;
}
Ví dụ
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)"; -- mô phỏng yêu cầu của IE8
["Cookie"] = "a=1; b=2; c=3"; -- gửi kèm cookie
})
if code == 200 then
sys.alert(body)
end
Lưu ý: Ví dụ trên sử dụng hàm ngoài chương này sys.alert.
Ví dụ (đối số có tên)
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)";
["Cookie"] = "a=1; b=2; c=3";
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
}
if code == 200 then
sys.alert(body)
end
Lưu ý: Ví dụ trên sử dụng hàm ngoài chương này sys.alert.
Ví dụ: lấy địa chỉ IP công khai
function get_ip()
local done = false
thread.dispatch(function()
while (true) do
if (done) then
sys.toast("", -1)
return
else
sys.toast("Đang lấy địa chỉ 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('%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?')
end
end
end
--
sys.alert(get_ip())
Lưu ý: Ví dụ trên sử dụng các hàm ngoài chương này sys.alert, sys.toast, sys.msleep, sys.rnd, thread.dispatch và device.front_orien.