python - 使用烧瓶登录外部网站
问题描述
我目前在使用烧瓶 webapp 时遇到了一些问题,我将其编写如下,但是当我尝试运行烧瓶应用程序时,我遇到了错误请求错误。(浏览器(或代理)发送了此服务器无法理解的请求)
本质上,我试图让用户通过烧瓶 webapp 登录到外部网站
这个错误的原因是什么?抱歉,如果我犯了一个愚蠢的错误,我对烧瓶很陌生。
from flask import Flask,render_template, request, redirect
import requests
from bs4 import BeautifulSoup as bs
app = Flask(__name__)
@app.route('/', methods = ["POST", "GET"])
def login():
username = request.form['username']
pin = request.form['password']
s = requests.Session()
r = s.get("https://www.example.com/User/Login")
soup = bs(r.text, 'html.parser')
loginToken = soup.findAll(attrs={"name" : "__RequestVerificationToken"})[0]['value']
#Create Login Payload
login_payload = {
"__RequestVerificationToken" : loginToken,
"UserName" : username,
"Password" : pin,
"returnUrl" : "https://example.com/user-action/?action=login&returnUrl=https://www.example.com/User/Information",
}
#Post Login Payload
r = s.post("https://www.example.com/Account/Login", data = login_payload)
if r.status_code == 200:
return render_template('home.html')
else:
return render_template('login.html')
return render_template('login.html')
@app.route('/home') #If login works, redirect to this page
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run(debug = True)
此外,如果与仅显示用户登录到flask webapp本身的传统教程相比,我可以参考其他资源来允许用户从flask webapp登录到外部URL,请执行分享给我,谢谢!
解决方案
您的端点有两个 Http 动词["POST", "GET"]
。您应该如下指定您的方法。
@app.route('/', methods = ["POST", "GET"])
def login():
if request.method == "GET":
#something do stuff
return render_template("your_html_page")
if request.method == "POST":
#something do stuff
return your_response, 200
编辑块
@app.route('/', methods = ["POST", "GET"])
def login():
if request.method == "GET":
return render_template('login.html')
if request.method == "POST":
#same logic here
if status_code == 200:
return redirect(url_for('home'))
return render_template('login.html')
推荐阅读
- python - 用于遍历文件夹和“获取”文件名并放入列表的 Python 代码
- tabulator - 在初始加载时隐藏嵌套表
- java - Java是否有类似IPC机制的Android Handler?
- javascript - 如何从 Observable 中检索数据并在 Interceptor 中使用它?
- javascript - 如何按首字母对列表进行分组?
- xamarin - Visual Studio for Mac - 在终端中查找组件版本
- ios - 如何更改 UISearchBar 中 PlaceHolder 的文本颜色?(iOS 13)
- microsoft-teams - MS Teams 的回合上下文中的团队 ID 不正确?
- python - 如何将分割模型模型转换为 openvino int8 模型?
- excel - 通过使 Excel 成为 OLE 对象来打开 Excel 电子表格