Récupérer le contenu d'une page web en mode asynchrone
(méthode GET)
L'avantage du mode asynchrone est qu'il ne "bloque" pas votre Eggdrop dans l'attente d'une réponse du site web : il envoie la requête puis continue à faire ce qu'il a à faire jusqu'à ce qu'une réponse lui parvienne.
La procédure
request_website est appelée en lui passant l'url en argument.
Déclaration des variables et chargement du package http
# timeout (en secondes)
variable timeout 5
variable useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
package require http
Procédures
###############################################################################
### Envoi d'une requête au site web
###############################################################################
proc request_website {url} {
variable useragent
variable timeout
::http::config -useragent $useragent
if { [catch { set token [::http::geturl $url -command process_received_data -timeout [expr {$timeout * 1000}]] }] } {
putloglev o * "La connexion au site $url n'a pas pu être établie."
}
}
###############################################################################
### Le site web a répondu, traitement de la réponse
###############################################################################
proc process_received_data {token} {
switch -- [::http::status $token] {
"error" {
putloglev o * "La connexion au site [set ${token}(url)] n'a pas pu être établie. Détails de l'erreur : [::http::node $token] - [::http::code $token] [::http::error $token]"
}
"eof" {
putloglev o * "La connexion au site [set ${token}(url)] a été interrompue par le serveur."
}
"ok" {
if { [set payload [::http::data $token]] eq "" } {
putloglev o * "Aucune donnée n'a été reçue du site [set ${token}(url)] dans le temps imparti."
} else {
* traitement de la variable $payload contenant les données reçues de la page web *
}
}
}
::http::cleanup $token
return
}