Gửi yêu cầu POST (http.post)
Khai báo
code, res_headers_json, body = http.post(URL [, timeout_secs, headers, data, url_no_escape])
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
code, res_headers_json, body = http.post{
url = URL;
timeout = timeout_secs;
headers = headers;
params = query_params;
-- Các tùy chọn nội dung yêu cầu dưới đây loại trừ lẫn nhau; thứ tự ưu tiên: multipart > data > json > upload_file
multipart = multipart_form;
data = body_data;
json = body_json;
upload_file = upload_file_path;
download_file = save_response_body_file_path;
progress = progress_callback;
progress_interval_ms = progress_interval_ms;
}
Tham số
- URL
Kiểu chuỗi. URL yêu cầu. Hàm mặc định escape URL; xemurl_no_escapenếu không muốn xử lý này. - timeout_secs
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:{}. - query_params
Kiểu bảng, không bắt buộc. Tham số chuỗi truy vấn có dạng{ field1 = value1, ... }. Mặc định:{}. - body_data
Kiểu chuỗi hoặc bảng, không bắt buộc. Nội dung yêu cầu. Mặc định: chuỗi rỗng.
Từ phiên bản 20250625, nếu truyền bảng thì bảng sẽ được mã hóa theo application/x-www-form-urlencoded. - multipart_form
Kiểu bảng, không bắt buộc. Dữ liệu biểu mẫu multipart cần gửi. Mặc định:{}. - body_json
Kiểu bảng, không bắt buộc. Nội dung được mã hóa theo application/json. - upload_file_path
Kiểu chuỗi, không bắt buộc. Gửi trực tiếp nội dung tệp làm nội dung yêu cầu. - save_response_body_file_path
Kiểu chuỗi, không bắt buộc. Nếu được cung cấp và yêu cầu thành công, body trả về là đường dẫn tệp đã lưu. - progress_callback
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 tải lên hoặc tải xuống thay đổi; đối số đầu tiên là thông tin tiến trình hiện tại. - progress_interval_ms
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. - url_no_escape
Kiểu boolean, không bắt buộc. true = không escape URL. Mặc định: false.
Để tự escape, hãy xem mô-đunlcurl, easy:escape và easy:unescape.
Giá trị trả về
- code
Kiểu số nguyên. Mã trạng thái HTTP; trả về -1 khi hết thời gian chờ. - res_headers_json
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; nếu đã lưu vào tệp thì đây là đường dẫn tệp. Trả về nil khi hết thời gian chờ.
Mô tả
Gửi dữ liệu bằng phương thức POST của HTTP/1.1.
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ề.
Với máy chủ HTTP/1.0 hoặc HTTP/0.9, bạn có thể dùng:
body = httpPost(URL, string_body, timeout_secs)
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 = bytes_sent;
count_of_bytes_expected_to_send = bytes_expected_to_send;
count_of_bytes_received = bytes_received;
count_of_bytes_expected_to_receive = bytes_expected_to_receive;
}
Ví dụ
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)", -- mô phỏng yêu cầu của IE8
["Cookie"] = "a=1; b=2; c=3"; -- gửi kèm cookie
}, "dữ liệu cần gửi")
if code == 200 then -- HTTP_OK
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.post{
url = "https://httpbin.org/post";
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";
["你好"] = "世界";
};
data = "dữ liệu cần gửi";
}
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ụ: gửi biểu mẫu
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, 'Đã gửi')
else
if (c == -1) then
sys.alert('Yêu cầu thất bại, vui lòng kiểm tra kết nối mạng', 0, 'Hết thời gian chờ')
else
sys.alert('Lỗi #'..c..'\n'..r, 0, 'Lỗi HTTP')
end
end
Lưu ý: Ví dụ trên sử dụng hàm ngoài chương này sys.alert.