發起 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