簡體   English   中英

向我的RESTful API(Python-Flask)發送POST請求,但收到GET請求

[英]Sending a POST request to my RESTful API(Python-Flask), but receiving a GET request

我正在嘗試以包含JSON的POST請求的形式向Zapier webhook發送觸發器。 如果我只是通過本地python腳本發送POST請求,它工作正常。

我想要做的是創建一個RESTful API,當調用create-row-in-gs端點時,它會觸發Zapier webhook。

如您所見,我正在向Hasura集群發送POST請求API調用。 但是,我沒有得到“200 OK SUCCESS”的響應,而是獲得了“200 OK失敗”,這意味着該請求被視為GET請求而不是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(在Hasura集群上運行)

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

幾周來一直在努力解決這個問題。 我究竟做錯了什么? 非常感謝任何幫助。

好的,我在本地檢查了你的腳本,發現了兩個問題。 兩者都在您的客戶端腳本中。

1) r = requests.post(url=api_url, data=create_row_data)應為r = requests.post(url=api_url, json=create_row_data)

2)您在Flask應用程序中查找created_onmodified_on ,但是您發送了created-onmodified-on

使用以下本地代碼:

客戶:

import json
import requests

api_url = 'http://localhost:5000/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!!'}
print(create_row_data)
r = requests.post(url=api_url, json=create_row_data)
print(r.status_code, r.reason, r.text)

服務器:

from flask import Flask,jsonify,request,make_response,url_for,redirect
import requests, json

app = Flask(__name__)

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.content

if __name__ == '__main__':
    app.run(host='localhost',debug=False, use_reloader=True)

確保您使用的是正確的協議。 httphttps

如果您使用http並查看重定向,則重定向Location標頭通常會包含正確的URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM