[Lua] 設定 HTTP 連線時的逾時秒數 (timeout)

[Lua] 設定 HTTP 連線時的逾時秒數 (timeout)

最近在用下面的 Lua 程式,

測試某個網站是否正常運作:

local http = require("socket.http")
local res, http_code, response_headers = http.request{
    url = site_info["url"] .. "?" .. os.time(),
    method = site_info["method"]
}

 

平常網站正常的話,程式運作正常。

網站如果很快速的傳回 HTTP 500 Internal Error 時,也可以很快取得錯誤。

但是,如果網站遲遲不回覆的話,那個 http.request() 就會一直回不來…

 

查了一下,我們可以用 socket.tcp.settimeout() 的方式,

來設定 HTTP 連線的逾時秒數。

程式如下,基本上就是指定 create 這個給 http.request() 的參數,

讓它回傳一個設定好逾時時間的 socket:

local socket = require "socket"
local res, http_code, response_headers = http.request{
    url = site_info["url"] .. "?" .. os.time(),
    method = site_info["method"],
    create = function()
        local req_sock = socket.tcp()
        req_sock:settimeout(15)
        return req_sock
    end
}

 

這樣,網站如果在 15 秒內沒有回傳任何資料的話,

http.request() 函式就會返回囉~

 

參考資料:lua http socket timeout – Stack Overflow

(本頁面已被瀏覽過 903 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料