Envoi d'une requête POST à mon API RESTful(Python-Flacon), mais la réception d'une requête GET
Je suis en train d'envoyer un déclencheur pour un Zapier webhook sous la forme d'une requête POST contenant JSON. Il fonctionne très bien si je viens d'envoyer la requête POST grâce à un script python.
Ce que je veux faire est de créer une API RESTful qui rend le déclencheur Zapier webhook lorsque la créer-ligne-en-gs extrémité est appelée.
Comme vous pouvez le voir, je suis de l'envoi d'une requête POST appel API pour la Hasura cluster. Mais au lieu de trouver la réponse comme "200 OK SUCCÈS", je suis un '200 OK échec", ce qui signifie que la demande est traitée comme une requête GET au lieu de POST.
test.py
#Python 3 Script to send a POST request containing JSON
import json
import requests
api_url = 'http://app.catercorner16.hasura-app.io/create-row-in-gs'
create_row_data = {'id': '1235','name':'Joel','created-on':'27/01/2018','modified-on':'27/01/2018','desc':'This is Joel!!'}
r = requests.post(url=api_url, data=create_row_data)
print(r.status_code, r.reason, r.text)
server.py (en cours d'Exécution sur Hasura cluster)
from src import app
from flask import jsonify,request,make_response,url_for,redirect
from json import dumps
from requests import post
url = 'https://hooks.zapier.com/hooks/catch/xxxxx/yyyyy/'
@app.route('/create-row-in-gs', methods=['GET','POST'])
def create_row_in_gs():
if request.method == 'GET':
return make_response('failure')
if request.method == 'POST':
t_id = request.json['id']
t_name = request.json['name']
created_on = request.json['created_on']
modified_on = request.json['modified_on']
desc = request.json['desc']
create_row_data = {'id': str(t_id),'name':str(t_name),'created-on':str(created_on),'modified-on':str(modified_on),'desc':str(desc)}
response = requests.post(
url, data=json.dumps(create_row_data),
headers={'Content-Type': 'application/json'}
)
return response
Ont été aux prises avec ce pendant des semaines. Ce que je fais mal? Serais reconnaissant de toute aide.
- Pas liées à votre problème, mais si votre demande est un échec, vous ne devriez pas rendement de 200.
- D'accord! Fera la remarque.
- Ma conjecture: vous obtenez une redirection.Essayez le
requests.post
avecallow_redirects=False
- Ouais, je l'ai fait maintenant, et maintenant il lit '301 moved permanently'. Prévu?
- Comme je l'ai dit, je ne faisais que deviner à partir de symptômes, qu'il pourrait y un post/redirect/get motif caché quelque part.
- Avez-vous essayez d'utiliser l'URL https au lieu de http un? J'ai visité l'URL que vous avez lié à votre test.py fichier, et c'est une URL https maintenant. Peut-être essayer ça et exécuter
test.py
? - Wow! Juste eu à utiliser https au lieu de http. Fonctionne maintenant.
Vous devez vous connecter pour publier un commentaire.
Assurez-vous d'utiliser le bon protocole.
http
ouhttps
.Si vous utilisez
http
et de voir une redirection, la redirectionLocation
en-tête de l'URL adéquate habituellement.Ok, j'ai vérifié le script en local et a trouvé deux questions. Les deux sont dans votre script client.
1)
r = requests.post(url=api_url, data=create_row_data)
devrait êtrer = requests.post(url=api_url, json=create_row_data)
2) Vous recherchez
created_on
etmodified_on
dans votre Flacon d'application, mais vous l'envoyezcreated-on
etmodified-on
.De travail local de code ci-dessous:
Client:
Serveur: