Avec cette fonction, vous pouvez créer une requête d'en-tête HTTP pour définir les paramètres d'exploitation d'une transaction HTTP, qui peut être utilisée pour de nombreuses choses (par exemple) l'authentification via des en-têtes HTTP si vous utilisez des API RESTful. La fonction nécessite l'adresse IP complète du serveur à demander ainsi que le type de requête à effectuer (sous forme de chaîne, voir la remarque ci-dessous): "GET", "HEAD", "POST", "PUT", " DELETE "," TRACE "," OPTIONS "ou" CONNECT ". Vous devrez également fournir un ds_map des paires clé / valeur (en tant que chaînes, où la clé est le champ d'en-tête et la valeur est les données requises pour l'en-tête), et l'argument final est une chaîne de données facultative que vous pouvez ajouter à la requête. alors il peut être soit 0 soit une chaîne vide "". Notez que vous pouvez également envoyer un tampon (voir la section sur les tampons pour plus de détails), auquel cas le dernier argument serait le "handle" du tampon à envoyer.
Cet événement va générer un "rappel" qui est récupéré par les événements HTTP, auquel cas il va générer un ds_map (plus communément appelé "dictionnaire") qui est exclusif à cet événement et est stocké dans la variable spéciale async_load. Cette ds_map a les deux clés suivantes liées à la fonction de requête:
- id: L'ID qui a été renvoyé par la commande. Si vous déclenchez une série de http_ demandes, vous devez alors savoir à laquelle vous obtenez la réponse, et ainsi vous utiliseriez cette valeur pour comparer à la valeur que vous avez stockée lorsque vous avez envoyé la demande pour trouver la bonne.
- response_headers: Si sa valeur est supérieure ou égale à 0, il contient un ds_map qui contient les en-têtes HTTP renvoyés avec la réponse à la requête HTTP.
REMARQUE: Les en-têtes HTTP suivent normalement le format "clé: valeur", mais comme GMS crée ces paires à partir de la carte ds_map, il n'est pas nécessaire d'inclure le signe ":" dans votre clé de carte ou vos chaînes de valeurs.REMARQUE: vous devez être conscient qu'en raison de la protection XSS dans les navigateurs, les demandes et les tentatives de chargement de ressources à partir de plusieurs domaines sont bloquées et peuvent renvoyer des résultats vierges. Veuillez consulter la section sur les problèmes inter-domaines pour plus de détails.
http_request(url, method, header_map, body);
Argument La description url L'adresse Web du serveur à partir duquel vous souhaitez obtenir des informations method La méthode de requête (normalement "POST" ou "GET", mais toutes les méthodes sont supportées) header_map Un ds_map avec les champs d'en-tête requis body Les données à transmettre suite aux en-têtes (peuvent être un handle de buffer binaire)
Real
var map = ds_map_create();
ds_map_add(map, "Host", "225.0.0.97:3000");
ds_map_add(map, "Connection", "keep-alive");
ds_map_add(map, "Content-Length", "169");
ds_map_add(map, "Cache-Control", "max-age=0");
ds_map_add(map, "Authorization", "Basic
eW95b19hZG1pbjpjNG5lZmllbGQ=");
ds_map_add(map, "Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
ds_map_add(map, "User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57
Safari/537.36");
ds_map_add(map, "Content-Type",
"application/x-www-form-urlencoded");
ds_map_add(map, "Accept-Encoding", "gzip,deflate,sdch");
ds_map_add(map, "Accept-Language",
"en-GB,en-US;q=0.8,en;q=0.6");
ds_map_add(map, "Cookie", "request_method=GET;
_InAppPurchases_session=69bb6ef6eec2b");
var
data="utf8=%E2%9C%93&authenticity_token=kPmS14DcYcuKgMFZUsN3XFfj3mhs%3D&product%5Bname%5D=CatchTheHaggis&product%5Bproduct_id%5D=http_test&commit=Create+Product";
request = http_request("http:225.0.0.97:3000/products", "POST",
map, data);
Le code ci-dessus crée un fichier ds_map avec les en-têtes HTTP correspondants pour la fonction, puis crée une chaîne de données à utiliser car il s'agit d'une requête POST. Enfin, la fonction est appelée, sa valeur d'identifiant étant stockée dans la variable "request" pour vérifier l'événement HTTP asynchrone.