Poster une réponse à un sujet: [HTTP] POST en Json ?
Attention, ce sujet est un sujet ancien (3795 jours sans réponse)
blietaer
Nope, c'était cette foutue librairie "import requests" qui prend des arguments nommés différents que ce soit en POST ou GET (et bli n'aime pas les man-page)
max
il te manque peut être un header pour la sortie en php:
header('Content-Type: application/json');
header('Content-Type: application/json');
blietaer
Yep, t'as tout à fait raison: pas de quoi s'embarquer dans du REST violent etc..juste du bon gros POST (je sais pas pq je bloquais sur l'existence (ou non) d'un form...)
Et ça marche plutôt bien, je lui fait recracher du JSON, mais python ne le décortique pas bien, je joue un peu encore avec les import de requests et urllib, ça finira par marcher.
Merci pour tout cela ..
Et ça marche plutôt bien, je lui fait recracher du JSON, mais python ne le décortique pas bien, je joue un peu encore avec les import de requests et urllib, ça finira par marcher.
Merci pour tout cela ..
gizmo
Que ce soit un form web qui existe ou pas, on s'en fiche. LA grosse difference syntaxique entre un POST et un GET, c'est que dans le POST, les infos transitent dans le body de la requete et non de l'URL. Dans le cas d'un form web, c'est ton browser qui s'en charge, mais le mechanisme est identique.
Pour ton cas, vu que le PHP ne devrait que traiter la requete et non l'emettre, c'est encore plus simple. La variable $_POST te permet de recuprerer le contenu d'un parametre nome passe dans le body de la requete (ex: $mon_contenu = $_POST['nom_de_mon_param'])
Apres, tu peux faire ce que tu veux avec. Si tu sais que le contenu est du JSON, tu appelle to json_decode sur $mon_contenu, et bim, tu as une jolie structure de creer, prete a l'emploi.
Enfin, si tu dois fournir un retour a l'appelant autre qu'un HTTP 204 (qui veut dire, c'est bon, circulez, y a rien a voir), tu peux jouer avec des headers pour definir le type de retour (text, json, xml, whathever...) et ensuite renvoyer la structure qui te plait.
Pour ton cas, vu que le PHP ne devrait que traiter la requete et non l'emettre, c'est encore plus simple. La variable $_POST te permet de recuprerer le contenu d'un parametre nome passe dans le body de la requete (ex: $mon_contenu = $_POST['nom_de_mon_param'])
Apres, tu peux faire ce que tu veux avec. Si tu sais que le contenu est du JSON, tu appelle to json_decode sur $mon_contenu, et bim, tu as une jolie structure de creer, prete a l'emploi.
Enfin, si tu dois fournir un retour a l'appelant autre qu'un HTTP 204 (qui veut dire, c'est bon, circulez, y a rien a voir), tu peux jouer avec des headers pour definir le type de retour (text, json, xml, whathever...) et ensuite renvoyer la structure qui te plait.
blietaer
Woauw, cool!
Merci pour tout cela et pour la recherche de docs à l'appui!
Je suis un peu embêté: cela parle bcp de PHP et la méthode POST pour des fields d'un formulaire mais je voudrais nuancer:
a.) le formulaire n'existe pas (pas à un humain de le remplir, juste une appli)
b.) ce n'est pas du PHP qui va déposer des données, mais PHP qui doit les recevoir/attendre...
Du coup, j'ai l'impression que le POST ne peut pas marcher puisqu'il n'est pas "attendu" par le serveur (pas de form, ni de submit)
Le plus "facile" que je trouve, c'est appeler la page avec l'URL qui contiendrait toutes les valeurs:
https://ip.du.serveur/id/val1/val2/val3/... ça je sais faire avec un bête serveur PHP...mais je trouve cela sale (dans le sens, je dois prévoire tjrs les valeurs, c'est super rigide et trop exposé)
En rêve je voudrais du coté python:
et du côté PHP:
Merci pour tout cela et pour la recherche de docs à l'appui!
Je suis un peu embêté: cela parle bcp de PHP et la méthode POST pour des fields d'un formulaire mais je voudrais nuancer:
a.) le formulaire n'existe pas (pas à un humain de le remplir, juste une appli)
b.) ce n'est pas du PHP qui va déposer des données, mais PHP qui doit les recevoir/attendre...
Du coup, j'ai l'impression que le POST ne peut pas marcher puisqu'il n'est pas "attendu" par le serveur (pas de form, ni de submit)
Le plus "facile" que je trouve, c'est appeler la page avec l'URL qui contiendrait toutes les valeurs:
https://ip.du.serveur/id/val1/val2/val3/... ça je sais faire avec un bête serveur PHP...mais je trouve cela sale (dans le sens, je dois prévoire tjrs les valeurs, c'est super rigide et trop exposé)
En rêve je voudrais du coté python:
- send_data_to_http($url, $data_array)
et du côté PHP:
- function receive_data_from_http($data_array) {
- }
gizmo
Non.
Tes recherches te menent vers ce que l'on appelle un POST http.
REST, c'est une maniere d'utiliser le protocole HTTP comme protocole d'etat pour une application web.
La base pour faire du POST en php, se trouve la: http://au2.php.net/manual/en/ref.http.php
Plus specifiquement, tu auras http://au2.php.net/manual/en/function.http-post-fields.php (a preferer a http://au2.php.net/manual/en/function.http-post-data.php )
Et pour traiter la requete qui arrive, tu utilise ca: http://au2.php.net/manual/en/book.json.php
Apres, tu as toute use serie de lib/framework qui peuvent egalement te faciliter la tache, mais tout ce trouve dans ces quelques pages.
Tes recherches te menent vers ce que l'on appelle un POST http.
REST, c'est une maniere d'utiliser le protocole HTTP comme protocole d'etat pour une application web.
La base pour faire du POST en php, se trouve la: http://au2.php.net/manual/en/ref.http.php
Plus specifiquement, tu auras http://au2.php.net/manual/en/function.http-post-fields.php (a preferer a http://au2.php.net/manual/en/function.http-post-data.php )
Et pour traiter la requete qui arrive, tu utilise ca: http://au2.php.net/manual/en/book.json.php
Apres, tu as toute use serie de lib/framework qui peuvent egalement te faciliter la tache, mais tout ce trouve dans ces quelques pages.
blietaer
OK, cool !
Mes recherches me mènent dans ce qu'on appele du REST, tu confirmes ?
La plupart des framework PHP le gère, semble-t-il, vais faire des petits tests...
Mes recherches me mènent dans ce qu'on appele du REST, tu confirmes ?
La plupart des framework PHP le gère, semble-t-il, vais faire des petits tests...
max
Oui, tu peux. C'est ce que tout le monde fait quand on parle d'Ajax et de Json.
blietaer
Bonsoir,
Je me demandais comment un non-humain (script, python, appli android,..) pouvait soumettre un petit tas de données équivalentes à un form, mais sans remplir le formulaire graphique.
Bien sûr on peut tout passer dans l'URL avec qques arguments, mais si c'est ok pour 2-3, cela devient vite crapuleux pour une array (non?)
Je sais qu'on peut facilement demander à PHP de causer JSON, mais c'est (d'après ma maigre expérience) surtout en sortie, à la
Ce que je cherche, c'est de pouvoir soumettre quelques infos d'un coup dans une requette URL, PHP s'occuperait de les recevoir, traiter et répondre (json)
Idéalement, je pourrais attaquer directement la DB MySQL avec mes données et chopper les réponses de la requête, mais je voudrais mettre une légère couche d'intelligence par au dessuse, et je ne peux donc me passer de PHP.
Est-ce que je suis entrain de ré-inventer le web service? soap?
Est-ce que l'input existe en json? xml? ou bien l'url avec toutes mes infos dedans reste le plus rapide et pas si crasse?
merci !
Je me demandais comment un non-humain (script, python, appli android,..) pouvait soumettre un petit tas de données équivalentes à un form, mais sans remplir le formulaire graphique.
Bien sûr on peut tout passer dans l'URL avec qques arguments, mais si c'est ok pour 2-3, cela devient vite crapuleux pour une array (non?)
Je sais qu'on peut facilement demander à PHP de causer JSON, mais c'est (d'après ma maigre expérience) surtout en sortie, à la
- return json_encode($data);
Ce que je cherche, c'est de pouvoir soumettre quelques infos d'un coup dans une requette URL, PHP s'occuperait de les recevoir, traiter et répondre (json)
Idéalement, je pourrais attaquer directement la DB MySQL avec mes données et chopper les réponses de la requête, mais je voudrais mettre une légère couche d'intelligence par au dessuse, et je ne peux donc me passer de PHP.
Est-ce que je suis entrain de ré-inventer le web service? soap?
Est-ce que l'input existe en json? xml? ou bien l'url avec toutes mes infos dedans reste le plus rapide et pas si crasse?
merci !