Utilisation de JSON dans une requête HTTP "GET"Je travaille à l'interface avec notre moteur de récupération de données.Je peux parfaitement soumettre un travail en utilisant une requête POST comme celle-ci :
request = Nouvelle requête HTTP(
URL( "http://fc8tdbitmapconvs07:11111/daas/"),
Méthode( "POST" ),
Json (Charger le fichier texte (ctfn))
);
données = requête << Envoyer ;
'data' contient la réponse du serveur et tout va bien.
------------------------------------------------
Cependant, lorsque j'essaie de vérifier l'état du travail en cours d'exécution avec une requête 'GET', le json n'est pas inclus dans la requête HTTP au serveur :
Tentative #1 :
request2 = Nouvelle requête HTTP(
URL( "http://fc8tdbitmapconvs07:11111/daas/status/"),
Méthode( "GET" ),
headers( {"Content-Type:application/json"} ), // ajoutez vos en-têtes personnalisés
Json (Charger le fichier texte (ctfn2))
);
data2 = request2 << Envoyer ;
Tentative #2
request2 = Nouvelle requête HTTP(
URL( "http://fc8tdbitmapconvs07:11111/daas/status/"),
Méthode( "GET" ),
headers( {"Content-Type:application/json"} ) // ajoutez vos en-têtes personnalisés
);
request2 < data2 = request2 << Envoyer ;
Dans les deux cas, le JSON ne se charge pas.Les informations d'en-tête parviennent parfaitement au serveur, mais l'endroit où le JSON doit se trouver dans la requête est vide.Qu'est-ce que je rate?
Merci
Re : Utiliser JSON dans une requête HTTP "GET"Cette fonctionnalité (utilisant "GET" lors de l'envoi de JSON) devrait être disponible dans JMP 15.
Re : Utiliser JSON dans une requête HTTP "GET"Une dernière chose (ou 2).le numéro de travail, etc. peut-il être transmis en tant que paramètre de chaîne de requête (ou même JSON peut être intégré dans l'en-tête de la demande)
et 2, assurez-vous d'ajouter le get avec un "corps" à la liste de souhaits.De cette façon, nous pouvons garder une trace et vous pouvez être averti quand il est là.
Merci.
-Bryan
Re : Utiliser JSON dans une requête HTTP "GET"Bryon,
Merci pour la réponse rapide.Je travaille directement avec le développeur de l'API REST et empaqueter le JSON dans une requête GET est leur manière documentée de demander des données.Vous avez raison de dire que la spécification n'est pas claire et que l'emballage de JSON dans une requête GET est ce qui est enseigné dans certains programmes CS.Dans ce cas l'idée est de passer un numéro de job qui renverra soit un code indiquant que le job n'est pas encore terminé (poll & response) soit un code indiquant qu'il est terminé, les noms des fichiers de données et un fichier zip contenant ces fichiers .Si vous pouviez intégrer quelque chose dans JMP 15, cela serait très utile.
Re : Utiliser JSON dans une requête HTTP "GET"Après avoir lu la spécification HTTP, je vois que l'envoi de données avec un GET est déconseillé et que les serveurs l'ignorent généralement.
J'ai trouvé cette discussion sur stackoverflow, qui renvoie aux spécifications HTTP pertinentes.
Cette déclaration est-elle correcte ? La méthode HTTP GET n'a toujours pas de corps de message
Cela revient essentiellement à ce que certaines implémentations de services Web personnalisés puissent l'utiliser et la spécification est assez nébuleuse à ce sujet.
Peut-être que je peux obtenir quelque chose pour JMP 15 si le besoin existe toujours.
Existe-t-il d'autres moyens d'interagir avec ce service ?
Re : Utiliser JSON dans une requête HTTP "GET"Le JSON est-il intégré dans un en-tête de requête ? (Dropbox, Onedrive et bien d'autres le font)
L'argument JSON dans la requête HTTP utilisée dans un POST/PATCH/PUT où le contenu est envoyé avec le type de contenu JSON.Il s'agit d'une action "soumettre".
GET sont "lus" et les arguments sont soit des chaînes de requête, soit incorporés dans un en-tête de requête.
Re : Utiliser JSON dans une requête HTTP "GET"bryan_boone,
Merci pour votre réponse rapide. Selon le développeur qui a écrit le
API REST le JSON est requis. Voici la version de travail en Python
status_info = obtenir(
'http://fc8tdbitmapconvs07:11111/daas/status/',
json={'_id' : '5cc311a97925b1000ce4fd54', 'include_complete' :
Vrai}
).json()
>> le nombre long en rouge est le numéro du travail qui bien sûr varie. Ce
bit fonctionne bien dans un cahier python ou dans JMP en utilisant le
suivant JSL. Mais comment puis-je le faire fonctionner avec le protocole HTTP Request ?
Merci!
-------------------------------------------------- -------------------------------------------------- -------------------------
Init Python();
Exécuter Python(
{X},
{status_info},
"
importation getpass
depuis io importer BytesIO
à partir de l'heure d'importation du sommeil
importer des pandas en tant que pd
à partir des requêtes importer obtenir, publier
status_info = obtenir(
'http://fc8tdbitmapconvs07:11111/daas/status/',
json={'_id' : '5cc311a97925b1000ce4fd54', 'include_complete' :
Vrai}
).json()
"
);
Terme Python();
Re : Utiliser JSON dans une requête HTTP "GET""OBTENIR"
et "POSTER"
sont deux méthodes de requête HTTP différentes ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods )
"GET" lit généralement les données d'un serveur tout en
"Post" soumet généralement des données à un serveur.
Il s'agit de Web Server/Web Service définis en dehors de JMP/JSL
Dans votre premier exemple, vous "POSTEZ" (ou soumettez) des données à "http://fc8tdbitmapconvs07:11111/daas/" et dites au service que ctfn est le contenu JSON à utiliser.
Dans Attempt#1, l'objectif est "GET" -ting le statut d'un travail en cours d'exécution. Je ne sais pas quel est le service, mais si le point de terminaison est "http://fc8tdbitmapconvs07:11111/daas/status/", alors vous voudriez quelque chose comme :
request2 = New HTTP Request(
url( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Method( "GET" )
);
data2 = request2 << Send;
Puisque vous ne soumettriez rien au serveur dans un GET.
De plus, "Content-Type:application/json" est utilisé pour décrire le contenu que vous envoyez (pas vraiment approprié dans un GET puisque vous recevez des données et probablement ignoré par le serveur Web)
Type de contenu : les en-têtes sont ce que vous envoyez (ils sont automatiquement définis par la requête HTTP)
Accepter: les en-têtes sont ce que vous dites au serveur Web que vous souhaitez.
request << Get MIME Type
vous dira ce que le serveur Web a envoyé. (la plupart des serveurs Web le définissent, mais il peut être vide)
Gardez également à l'esprit qu'après tout
request << Send
Tu peux faire
request << Get Status; //this is the http status code
request << Get Status Message; //this is the message from the server
pour enquêter sur tout message d'erreur émis par le service Web.
HTH