如何使用flask.redirect发送POST请求?

3

我正在尝试创建一个Flask服务,在其中我想要将来自一个request.form的数据以JSON格式发送到另一个URL,请问有谁可以帮助我实现这个目标吗?

redirect(url_for('any_method'), json = json.dumps(my_form_dict))

当我尝试执行上述代码时,我遇到了以下错误:
TypeError: redirect() got an unexpected keyword argument 'json' The above is the error here.

问题出在哪里?你已经有了解决方案,只需在第一个路由中传递 json=request.form 即可... - josepdecid
类型错误:redirect()收到了一个意外的关键字参数'json'以上是出现的错误。 - Mukunda M Mhasalkar
好的,试着编辑问题并添加这些细节以使其更清晰。 - josepdecid
好的,谢谢您的建议。 - Mukunda M Mhasalkar
你的问题不够清晰。你是想重定向POST请求本身吗?如果是,那么重定向POST请求是不可能的。更多信息请参考这里 - Andrejs Cainikovs
显示剩余4条评论
4个回答

7
您可以使用307状态码重定向POST请求。 使用:
redirect(url_for('any_method', json=json.dumps(my_form_dict)), code=307)

更多信息请参考这个答案: 在flask中重定向时发出POST请求


4
无法重定向POST请求。 更多信息请参见此处

0

你的问题在于你向 redirect 函数传递了过多的参数。该函数仅期望三个参数:locationcodeResponse。如果你想传递额外的参数,请使用 Flask 的 url_for 方法:

redirect(url_for('any_method', json=form_json))

请注意,你之前将url_for和额外字段作为两个参数传递。在我的版本中,我已经将额外字段添加到了url_for中,因此redirect只接收一个参数。

这个答案解决了您的问题吗?如果是,请投票并将此答案标记为正确。 - josepdecid
我也尝试了上面的代码,但是使用Flask的request.json与上述步骤不兼容。即使使用了上述方法,我仍然无法在请求中获取JSON。 - Mukunda M Mhasalkar
看一下请求对象,也许你没有将它作为“表单”发送,请尝试访问“request.data”。 - josepdecid

0

我使用了 requests 包将一个 GET 请求重定向为 POST 请求。
关键是使用 flask.make_response() 创建一个新的 Response 对象。
在我的场景中,最后的响应是 HTML 文本,所以我使用 text 作为响应结果。

from flask import request, make_response
import requests

@app.route('/login', methods=['GET'])
def login():
    data = {"data": request.args['data']}
    redirect_response = requests.post('https://my-api/login', json=data).text
    return make_response(redirect_response, 302)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接