Flask服务器端表单POST

时间:2014-12-23 14:16:39

标签: python flask

我试图在Flask模拟服务器端表单后期操作。 使用Requests lib我做后期操作:

@flask_app.route('/hello',methods=['GET','POST'])
def hello():
    r   = requests.post(              
             "https://somesite.hello"
            , data= {'user': 'bill','pass': 123})
    return r.text                             
    #return redirect("https://somesite.hello")

它的工作。但是当我通过html发布真实形式时,它也会进行重定向。 在#1网址后 http://mysite.hello:5000/hello ,但我需要来自#1但来自#2 https://somesite.hello的网址如何同时执行1和2?谢谢!

UPD:

我找到了一些解决方案,我不是很喜欢它,因为用户会看到"重定向到结算页面"页面一秒钟。可能有人知道如何处理请求并重定向以获得一些结果?

@flask_app.route('/hello',methods=['GET','POST'])
def hello():
    url = "https://somesite.hello"
    return flask_app.make_response("""
    <html>
        <body onload='document.forms[0].submit()'>
            Redirecting to billing page...
            <form action='%s' method='post'>
                <input type='hidden' name='user' value='%s'>
                <input type='hidden' name='pass' value='%s'>
            </form>
        </body>
    </html>
    """%(url
        ,'bill'
        ,123)) 

1 个答案:

答案 0 :(得分:1)

只是不要遵循重定向并将您自己的重定向发送到以下页面:

r = requests.post('some.url', data={'some': 'data'}, allow_redirects=False)
return redirect(r.headers['location'])

我们提交表单数据,但不要使用请求进行重定向。相反,我们将重定向传递给最终用户。但是,如果付款处理器使用Cookie来保留状态(很可能会这样做),这将无效,因为some.url为您的请求设置的Cookie无法传递给some.url