Python Sendgrid入站webhook数据在Flask中完全为空,但可用于从请求发送的请求?
我现在有一个heroku烧瓶应用程序。当它收到POST请求时,它使用sendgrid API向我的个人电子邮件发送一封包含POST数据的电子邮件。以字符串作为参数传递的相关代码(driver.sendgridemail是python的示例代码):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')
@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)