En informatique, une demande de publication est utilisée lorsque le client a besoin d'envoyer des données au serveur dans le cadre de la demande de récupération, par exemple lors du téléchargement d'un fichier ou de la soumission d'un formulaire, et dans GameMaker Studio 2. Contrairement à la méthode de requête http_get où seule une URL est envoyée au serveur, http_post_string() inclut également une chaîne qui est envoyée au serveur et peut entraîner la création d'une nouvelle ressource ou la mise à jour d'une ressource existante ou les deux. Il convient de noter que les paramètres de requête HTTP (les bits parfois "collés" à la fin d'une URL lorsque vous soumettez un formulaire sur une page Web) sont parfaitement acceptables lors de l'utilisation de cette fonction.
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 contiendra des valeurs différentes selon que des données sont renvoyées ou non. Par exemple, si vous avez demandé un fichier, l'événement se déclenchera plusieurs fois à la réception de chaque paquet de données afin que vous puissiez afficher une barre de progression, par exemple. La structure générale de la ds_map sera la suivante:
- 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.
- status: Renvoie une valeur inférieure à 0 pour une erreur, 0 pour complete et 1 pour la réception de paquets (voir ci-dessous pour plus de détails).
- résultat: Les données reçues (chaîne uniquement).
- url: l' URL complète que vous avez demandée
- http_status: le code d'état brut http (si disponible). Cela renvoie le code d'état Web standard pour la plupart des navigateurs, par exemple: 304 pour "Non modifié" ou 204 pour "Aucun contenu", etc...
Si plusieurs paquets sont retournés à votre jeu, la clé de rappel "status" retournera 1, auquel cas le fichier ds_map aura les clés supplémentaires suivantes:
- "contentLength": C'est la taille du fichier que le serveur web a dit que vous devriez recevoir (peut-être -1 si le serveur ne retourne pas ces données).
- "sizeDownloaded": La taille des données qui ont déjà été téléchargées.
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_post_string(url, string);
Argument La description url L'adresse Web du serveur à partir duquel vous souhaitez obtenir des informations string La chaîne que vous souhaitez envoyer à l'URL spécifiée
Real
le http_post_string La fonction peut être appelée à partir de n'importe quel événement, et comme elle est asynchrone, le rappel peut être presque instantané ou prendre plusieurs secondes. Appeler la fonction est simple et ressemblerait à ceci:
var str = "name=" + global.player_name +
"&score=" + string(global.player_score);
post = http_post_string("http://www.angusgames.com/game?game_id=" +
string(global.game_id), str);
Le code ci-dessus envoie une demande de récupération à l'URL spécifiée avec les paramètres donnés ainsi que l'envoi des données supplémentaires (nom du joueur et score sous forme codée URL) stockées dans la variable str. Cela déclenchera tous les événements Http asynchrones définis si un rappel est reçu, et vous pouvez vérifier le "id" retourné par rapport à celui stocké dans la variable post pour vous assurer que vous exécutez le bon code si vous avez utilisé divers http_post_string() les fonctions. L'exemple de code suivant montre comment cela serait fait:
var r_str = "null";
if ds_map_find_value(async_load, "id") == post
{
if ds_map_find_value(async_load, "status") == 0
{
r_str = ds_map_find_value(async_load, "result");
}
}Le code ci-dessus va d'abord vérifier l'identifiant de la carte ds_map qui a été créée, puis vérifier l'état du rappel. Si la valeur est égale à 0 (succès de la signalisation), le résultat du rappel sera alors stocké dans une variable pour une utilisation future, sinon la variable contiendra simplement une valeur par défaut (dans ce cas "null").