Skip to content

API UO HTTP_Header zh tw

Codex edited this page Oct 3, 2026 · 1 revision

UO.HTTP_Header

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

UO.HTTP_Get · UO.HTTP_Post · UO.HTTP_Body · UO.HTTP_Header

ClassicUO • Runtime API

讀取此腳本最近的 HTTP 回應標頭,例如 Content-Type;不是內文、請求標頭或 HTTP 狀態碼。

完整語法

UO.HTTP_Header() -> Any

參數

沒有參數。

傳回值

String:以 CRLF 分隔的「名稱: 值」,沒有 HTTP 狀態行。首次請求前或網路錯誤後為空;顺序與大小寫不保證,未提供獨立的狀態碼命令。

行為

  • 回應屬於此腳本的 runtime。其下一次 GET/POST 會取代回應,其他脚本不會影響它;不存入設定檔。要保留舊回應,先複製到變數。
  • GET/POST 在腳本執行緒等待,請求與完整內文共用 20 秒期限。停止腳本會取消等待,Body/Header 不等待。即使使用 File,仍會先把全部內文載入記憶體。
  • 依 charset 解碼;缺少或未知時使用 UTF-8,也會讀取 4xx/5xx 回應。網路錯誤或逾時會顯示錯誤並清空內文與標頭;Try/Catch 不能取代回應驗證。腳本取消會繼續傳遞,本機寫入或參數錯誤可被捕捉。
  • Header 包含回應及內容標頭,二進位 GET 後亦可讀取。名稱比較不分大小寫;Content-Type 不驗證內容,不要把下載資料當程式碼執行。

內部函式:從呼叫到結果

這是客戶端的實作步驟,不是額外命令。GET/POST 呼叫 HttpRequest;Body/Header 只讀取所屬 runtime 的結果。

1. ExecuteClientApiCompatibility

Header 包含回應及內容標頭,二進位 GET 後亦可讀取。名稱比較不分大小寫;Content-Type 不驗證內容,不要把下載資料當程式碼執行。

String:以 CRLF 分隔的「名稱: 值」,沒有 HTTP 狀態行。首次請求前或網路錯誤後為空;顺序與大小寫不保證,未提供獨立的狀態碼命令。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 函式 ExecuteClientApiCompatibility.

這是客戶端的實作步驟,不是額外命令。GET/POST 呼叫 HttpRequest;Body/Header 只讀取所屬 runtime 的結果。

範例

依名稱讀取 Content-Type

# 依名稱讀取 Content-Type
#
# 讀取此腳本最近的 HTTP 回應標頭,例如 Content-Type;不是內文、請求標頭或 HTTP 狀態碼。
#
# String:以 CRLF 分隔的「名稱: 值」,沒有 HTTP 狀態行。首次請求前或網路錯誤後為空;顺序與大小寫不保證,未提供獨立的狀態碼命令。

SUB Main()
    # ReadHeader 在行首不分大小寫搜尋名稱並去除值兩側空白,找不到傳回空字串。
    # example.com 未提供這些示範服務,請換成自己的 URL。執行會發出真正的 HTTP 請求,不會執行遊戲動作。

    UO.HTTP_Get("https://example.com/basic-status")
    Return ReadHeader(UO.HTTP_Header(), "Content-Type")
END SUB

Function ReadHeader(headers, name)
    Dim marker = Chr(13) & Chr(10) & LCase(name) & ":"
    Dim text = Chr(13) & Chr(10) & headers & Chr(13) & Chr(10)
    Dim start = InStr(1, LCase(text), marker)
    If start = 0 Then
        Return ""
    End If
    start += Len(marker)
    Dim finish = InStr(start, text, Chr(13) & Chr(10))
    Return Trim(Mid(text, start, finish - start))
End Function

參數與執行說明:

  • ReadHeader 在行首不分大小寫搜尋名稱並去除值兩側空白,找不到傳回空字串。
  • example.com 未提供這些示範服務,請換成自己的 URL。執行會發出真正的 HTTP 請求,不會執行遊戲動作。

搜尋 JSON 標記

# 搜尋 JSON 標記
#
# 讀取此腳本最近的 HTTP 回應標頭,例如 Content-Type;不是內文、請求標頭或 HTTP 狀態碼。
#
# String:以 CRLF 分隔的「名稱: 值」,沒有 HTTP 狀態行。首次請求前或網路錯誤後為空;顺序與大小寫不保證,未提供獨立的狀態碼命令。

SUB Main()
    # 在所有標頭搜尋 application/json,傳回 Boolean,不是資料驗證。精確欄位用 ReadHeader,內容再用 JsonParse 檢查。
    # example.com 未提供這些示範服務,請換成自己的 URL。執行會發出真正的 HTTP 請求,不會執行遊戲動作。

    UO.HTTP_Get("https://example.com/basic-status")
    Dim headers = UO.HTTP_Header()
    Return InStr(1, LCase(headers), "application/json") > 0
END SUB

參數與執行說明:

  • 在所有標頭搜尋 application/json,傳回 Boolean,不是資料驗證。精確欄位用 ReadHeader,內容再用 JsonParse 檢查。
  • example.com 未提供這些示範服務,請換成自己的 URL。執行會發出真正的 HTTP 請求,不會執行遊戲動作。

二進位下載的標頭

# 二進位下載的標頭
#
# 讀取此腳本最近的 HTTP 回應標頭,例如 Content-Type;不是內文、請求標頭或 HTTP 狀態碼。
#
# String:以 CRLF 分隔的「名稱: 值」,沒有 HTTP 狀態行。首次請求前或網路錯誤後為空;顺序與大小寫不保證,未提供獨立的狀態碼命令。

SUB Main()
    # 串流不影響讀取標頭;內文在 data,HTTP_Body 為空。
    # example.com 未提供這些示範服務,請換成自己的 URL。執行會發出真正的 HTTP 請求,不會執行遊戲動作。

    Dim data = MemoryStream()
    Using data
        UO.HTTP_Get("https://example.com/route-data.bin", data)
        Dim headers = UO.HTTP_Header()
        Return headers
    End Using
END SUB

參數與執行說明:

  • 串流不影響讀取標頭;內文在 data,HTTP_Body 為空。
  • example.com 未提供這些示範服務,請換成自己的 URL。執行會發出真正的 HTTP 請求,不會執行遊戲動作。

Clone this wiki locally