首页 > 解决方案 > 从服务器到服务器的发布请求不正确

问题描述

我有数据库服务器,我有一个 webhook 接收服务器。当我将/itgpalertadd端点用于任何网站的 webhook 时,它可以工作。但是,当我尝试从我的 webhook 接收服务器向我的数据库服务器发出 POST 请求时,日志显示none让我认为 json 不正确。

这是我用来尝试将 json 数据从local clientto发送到webhook serverto的测试客户端文件database server

测试客户端文件:

import requests
import json

webhook_url = 'http://127.0.0.1:5000/'

data = {"Password Trigger":"Password Updated","Password Name":"super fake emailk","Password Url":"https://conglomo.itglue.com/1316532/passwords/4585688","Organization Name":"conglomo Systems, Inc"}

r = requests.post(webhook_url, data=json.dumps(data), headers={'Content-Type': 'application/json'})

这将转到 webhook 服务器:

@app.route("/", methods=['POST'])
def itgluealertwebhook():
    if request.method == 'POST':
        
        json_payload = json.dumps(request.json, indent=1)
        requestlink = requests.post(url = "http://127.0.0.1:5060/itgpsqdbadd",data = json_payload)
        print(json_payload)
        print(requestlink)
    return json_payload

来自 webhook 服务器的结果:

{“密码触发器”:“密码更新”,“密码名称”:“超级假电子邮件”,“密码网址”:“https://alloysystems.itglue.com/1316532/passwords/4585688”,“组织名称”: “合金系统公司”} <响应 [200]>

但是,当它到达数据库服务器时,它会none在日志中显示,而不是实际的 json 数据:

@app.route('/itgpsqdbadd', methods=['POST'])
def itgluewebhook():
    if request.method == 'POST':
        print(request.json)
        requestj = request.json
        f = open('flasklogs.txt', 'a')
        f.write(str(request.json)+"\n")
        sys.stdout = f
        # sys.stderr = f
        fullpasswordurl = json.dumps(requestj['Password Url'])
        print("variable: " + fullpasswordurl)

        if fullpasswordurl=='""':
            print("we are going to delete this from the database as it has no url")
            itgname_str = json.dumps(requestj['Password Name']).strip('"').strip("'")
            print(itgname_str)
            connecttosql = sqlite3.connect('companies.db')
            connecttosql.row_factory = sqlite3.Row
            connectioncursor = connecttosql.cursor()
            connectioncursor.execute("DELETE FROM ITGluepds WHERE itgname LIKE ?", (itgname_str,))
            connecttosql.commit()
            print("Removed from database successfully!")

        else:
            print("we are going to insert or update this record as the url exists")

            try:   
                itgname_str = json.dumps(requestj['Password Name']).strip('"').strip("'")
                passwordurl_str = json.dumps(requestj['Password Url']).strip('"').strip("'")
                itgpwid_str = str(passwordurl_str.split("/")[-1])
                itgcid_str = str(passwordurl_str.split("/")[-3])
                itglueapi = "ITG.8b4510ebdc267d8a0842f910da56c80b.aR7vulOblpgP-oeDAEiIpzeHU-027IOOuJ25XmJmWmV2vby-9QjbrjkwX7jiKktb"
                header={"x-api-key" : itglueapi}
                passwordlink = requests.get("https://api.itglue.com/organizations/" + itgcid_str + "/relationships/passwords/"+itgpwid_str, headers=header)
                passwordata = passwordlink.json()
                passwordusername = str(passwordata['data']['attributes']['username'])
                itgcompany_str = str(passwordata['data']['attributes']['organization-name'])
                connecttosql = sqlite3.connect('companies.db')
                print("starting password update")
                connectioncursor = connecttosql.cursor()
            
                sql_insertval = """INSERT OR IGNORE INTO ITgluepds (pwid, itgname, itgusername, itgcompany, itglueid)
                                    VALUES(?,?,?,?,?) ;"""

                sql_insertvalU = """UPDATE OR IGNORE ITgluepds 
                                    SET pwid = ?, itgname = ?, itgusername = ?, itgcompany = ?, itglueid = ?;"""

                data_tuple = (itgpwid_str, itgname_str, passwordusername, itgcompany_str, itgcid_str)
                print(data_tuple)
                connectioncursor.execute(sql_insertval, data_tuple)
                connectioncursor.execute(sql_insertvalU, data_tuple)
                           
                connecttosql.commit()
                print(itgcompany_str)
                print(itgname_str)
            except Exception as Argument:
                logging.exception('Got exception on main handler')
                raise
            

        return 'success', 200
    else:
        f = open('flasklogs.txt', 'a')
        sys.stdout = f
        f.write("aborted")
        abort(400)

如果有什么我想念的,请告诉我。

谢谢

标签: pythonjson

解决方案


我想通了,虽然我还不确定为什么。

我更改了我的 webhook 接收器服务器以将其用于发布请求:

@app.route('/itgps', methods=['POST'])
def itgluealertwebhook():
    if request.method == 'POST':
        f = open('flasklogs.txt', 'a')
        sys.stdout = f
        json_payload = request.json
        requestlink = requests.post(url = "http://127.0.0.1:5060/itgpsqdbadd",data = json.dumps(json_payload), headers={'Content-Type': 'application/json'})
        print(json_payload)
        print(requestlink)
    return json_payload

基本上我json.dumps在我的有效载荷上执行了该方法requests.post


推荐阅读