Lancer une requête GET (http.get)
Déclaration
codeHTTP, texteJSONEnTêtes, corps = http.get(URL [, secondesExpiration, enTêtes, URLSansEscape ])
Déclaration (paramètres nommés)
Pris en charge depuis 20250625 ; la progression est disponible depuis 20260402.
codeHTTP, texteJSONEnTêtes, corps = http.get{
url = URL;
timeout = secondesExpiration;
headers = enTêtes;
params = paramètresQuery;
download_file = cheminDeSauvegarde;
progress = rappelProgression;
progress_interval_ms = intervalleProgressionMs;
}
Paramètres
- URL — Texte, URL à requêter ; échappée par défaut
- secondesExpiration — Nombre réel facultatif, délai en secondes ; par défaut 10
- enTêtes — Table facultative d’en-têtes ; par défaut
{} - paramètresQuery — Table facultative de paramètres Query ; par défaut
{} - cheminDeSauvegarde — Texte facultatif ; en cas de succès, le corps renvoie le chemin du fichier
- rappelProgression — Fonction facultative, disponible depuis 20260402, appelée lorsque la progression change
- intervalleProgressionMs — Entier facultatif, intervalle en millisecondes ; disponible depuis 20260402
- URLSansEscape — Booléen facultatif ; true envoie l’URL sans escape, false par défaut. Pour personnaliser l’escape, consultez lcurl, easy:escape et easy:unescape.
Valeur de retour
- codeHTTP — Entier, code HTTP ; -1 en cas d’expiration
- texteJSONEnTêtes — Texte ou nil, en-têtes JSON ; nil en cas d’expiration
- corps — Chaîne ou nil, contenu renvoyé ; chemin si sauvegardé dans un fichier ; nil en cas d’expiration
Description
Utilise la méthode GET de HTTP/1.1 pour obtenir une ressource réseau. Les ressources ne sont pas enregistrées sur le disque ; pour les gros téléchargements, utilisez http.download. Pour HTTP/1.0 ou 0.9, utilisez httpGet. Cette fonction peut céder l’exécution ; avant son retour, d’autres threads peuvent s’exécuter.
La fonction de rappel reçoit une structure info :
{
count_of_bytes_sent = octetsEnvoyés;
count_of_bytes_expected_to_send = octetsÀEnvoyer;
count_of_bytes_received = octetsReçus;
count_of_bytes_expected_to_receive = octetsÀRecevoir;
}
Pour les serveurs HTTP/1.0 ou HTTP/0.9, l’API http.get est remplacée par httpGet :
corps = httpGet(URL, secondesExpiration)
Exemple
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)", -- Requête simulant IE8
["Cookie"] = "a=1; b=2; c=3"; -- Envoyer également le cookie
}, "需要发送过去的数据")
if code == 200 then -- Code HTTP_OK
sys.alert(body)
end
Remarque : le code utilise sys.alert.
Exemple (paramètres nommés)
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)"; -- Requête simulant IE8
["Cookie"] = "a=1; b=2; c=3"; -- Envoyer également le cookie
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
data = "需要发送过去的数据";
}
if code == 200 then -- Code HTTP_OK
sys.alert(body)
end
Remarque : le code utilise sys.alert.
Exemple : obtenir l’adresse IP publique
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
-- Copier ce code au début du script, puis l’appeler dans le script
sys.alert(get_ip())
Remarque : le code utilise sys.alert, sys.toast, sys.msleep, sys.rnd, thread.dispatch et device.front_orien.