Zum Hauptinhalt springen

GET-Anfrage senden (http.get)

Deklaration

HTTP_Statuscode, Antwortkopf_JSON_Text, Antwortkörper = http.get(URL [, Timeout_in_Sekunden, Anfragekopf, URL_nicht_ESCAPEN ])

Deklaration (benannte Parameter)

Unterstützt ab 20250625; Fortschrittsparameter werden ab Versionen nach 20260402 unterstützt.

HTTP_Statuscode, Antwortkopf_JSON_Text, Antwortkörper = http.get{
url = URL;
timeout = Timeout_in_Sekunden;
headers = Anfragekopf;
params = Queryparameter;
download_file = Dateipfad zum Speichern des Antwortkörpers bei Erfolg;
progress = Fortschritts-Callback;
progress_interval_ms = Fortschrittsintervall in Millisekunden;
}

Parameter

  • URL
    Text, anzufordernde URL-Adresse; diese Methode escaped die URL standardmäßig prozentcodiert. Falls dies nicht gewünscht ist, siehe die Beschreibung des Parameters URL nicht ESCAPEN.
  • Timeout_in_Sekunden
    Reelle Zahl, optionaler Parameter, Anfrage-Timeout in Sekunden, standardmäßig 10
  • Anfragekopf
    Tabelle, optionaler Parameter, Kopfzeilen der Anfrage im Format {field1 = value1, field2 = value2, ...}, standardmäßig {}
  • Queryparameter
    Tabelle, optionaler Parameter, Query-Parameter der Anfrage im Format {field1 = value1, field2 = value2, ...}, standardmäßig {}
  • Dateipfad zum Speichern des Antwortkörpers bei Erfolg
    Text, optionaler Parameter; wenn angegeben, ist der Antwortkörper nach erfolgreicher Anfrage der Pfad der gespeicherten Datei
  • Fortschritts-Callback
    Funktion, optionaler Parameter, Unterstützung ab Versionen nach 20260402. Wird bei Änderungen des Anfragefortschritts aufgerufen; der erste Parameter des Callbacks enthält die aktuellen Fortschrittsinformationen
  • Fortschrittsintervall in Millisekunden
    Ganzzahl, optionaler Parameter, Unterstützung ab Versionen nach 20260402. Steuert das Intervall der Fortschritts-Callbacks in Millisekunden
  • URL nicht ESCAPEN
    Boolescher Wert, optionaler Parameter; true sendet die URL direkt ohne Escaping, standardmäßig false
    Benutzerdefiniertes URL-Escaping ist im lcurl-Modul unter easy:escape und easy:unescape beschrieben

Rückgabewerte

  • HTTP-Statuscode
    Ganzzahl, HTTP-Statuscode dieser Anfrage; bei Timeout -1
  • Antwortkopf-JSON-Text
    Text oder nil, nach Abschluss der Anfrage zurückgegebene Kopfzeilen im JSON-Format; bei Timeout nil
  • Antwortkörper
    String oder nil, nach Abschluss der Anfrage zurückgegebener Inhalt; wenn der Antwortkörper in einer Datei gespeichert wird, ist dieser Wert der Dateipfad; bei Timeout nil

Hinweise

Fordert mit der GET-Methode des HTTP/1.1-Protokolls eine Netzwerkressource an.
Diese Funktion speichert die Ressource nicht auf der Festplatte. Für größere Netzwerkressourcen wird http.download empfohlen.
Diese Funktion kann die Ausführung abgeben; vor ihrer Rückgabe können andere Threads ausgeführt werden.
Wenn die Protokollversion des Servers HTTP/1.0 oder HTTP/0.9 ist, kann stattdessen die Methode httpGet verwendet werden.

Antwortkörper = httpGet(URL, Timeout_in_Sekunden)

Die vom Fortschritts-Callback empfangene info-Struktur sieht wie folgt aus:

{
count_of_bytes_sent = Gesendete_Byte;
count_of_bytes_expected_to_send = Voraussichtlich_zu_sendende_Byte;
count_of_bytes_received = Empfangene_Byte;
count_of_bytes_expected_to_receive = Voraussichtlich_zu_empfangende_Byte;
}

Beispiel

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)"; -- Eine IE8-Anfrage simulieren
["Cookie"] = "a=1; b=2; c=3"; -- Zusätzlich Cookie übermitteln
})
if code == 200 then -- Wenn der zurückgegebene Statuscode HTTP_OK ist
sys.alert(body)
end

Hinweis: Der obige Code verwendet die Funktion sys.alert aus einem anderen Kapitel.

Beispiel (benannte Parameter)

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)"; -- Eine IE8-Anfrage simulieren
["Cookie"] = "a=1; b=2; c=3"; -- Zusätzlich Cookie übermitteln
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
}
if code == 200 then -- Wenn der zurückgegebene Statuscode HTTP_OK ist
sys.alert(body)
end

Hinweis: Der obige Code verwendet die Funktion sys.alert aus einem anderen Kapitel.

Beispiel einer http.get-Wrapper-Funktion zum Abrufen der externen IP-Adresse

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
--
-- Den obigen Code an den Anfang des eigenen Skripts kopieren und anschließend im Skript verwenden
sys.alert(get_ip())

Hinweis: Der obige Code verwendet die Funktionen sys.alert, sys.toast, sys.msleep, sys.rnd, thread.dispatch und device.front_orien aus anderen Kapiteln.