Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sendgrid入站webhook数据在Flask中完全为空,但可用于从请求发送的请求?_Python_Flask_Sendgrid - Fatal编程技术网

Python Sendgrid入站webhook数据在Flask中完全为空,但可用于从请求发送的请求?

Python Sendgrid入站webhook数据在Flask中完全为空,但可用于从请求发送的请求?,python,flask,sendgrid,Python,Flask,Sendgrid,我现在有一个heroku烧瓶应用程序。当它收到POST请求时,它使用sendgrid API向我的个人电子邮件发送一封包含POST数据的电子邮件。以字符串作为参数传递的相关代码(driver.sendgridemail是python的示例代码): @app.route('/', methods=['GET', 'POST']) def index(): if request.method == "POST": data = request.data.decode('utf-8')

我现在有一个heroku烧瓶应用程序。当它收到POST请求时,它使用sendgrid API向我的个人电子邮件发送一封包含POST数据的电子邮件。以字符串作为参数传递的相关代码(driver.sendgridemail是python的示例代码):

@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == "POST":
    data = request.data.decode('utf-8')
    driver.sendgridemail("Data is here: %s" % (data)) 
    return data
else:
    return render_template("index.html")
当我使用requests.POST发布时:

requests.post("my_heroku_url", data=json.dumps({"some":"data"}), headers={"Content-Type":"application/json"})
我收到一封个人电子邮件,其中包含“数据在这里:{“一些”:“数据”}”

然而,当我使用sendgrid入站解析功能时,转发到我个人电子邮件的唯一电子邮件是“Data is here:”,这显然是不理想的

它是否与内容类型有关?为什么它不处理来自传入电子邮件的数据?很明显,它会收到电子邮件,因为它可以通过flask应用程序转发到我的个人电子邮件,但它无法检索数据。换句话说,POST请求通过,但它无法检索任何数据,并给我一个空白的二进制字符串。最后,is仍然认为它是b,这不是有点奇怪吗?这是否意味着它永远不会通过sendgrid解析被解码成字符串,但它通过python请求post被解码成字符串

将发送到HTTP端点的请求将被编码为多部分/表单数据

您需要使用
request.form
dict来访问Flask中的表单数据

Sendgrid的博客上提供了一个教程:


此外,当您进行更改时,应该删除
headers={“Content-Type”:“application/json”}
来自您的
请求。post
调用,这样您也可以将其作为表单数据发送。

也有同样的问题,但请求了一个表单,我将其转换为dict。webhook现在工作得很好。我还建议您使用ngrok测试端点,因为sendgrid要求您公开url

data = request.form.to_dict(flat=False)