Flask中如何获取RFC3986定义的URL里的用户名密码信息?
关于Flask获取URL中用户名和密码的问题解答
嘿,我来帮你拆解这个问题~
首先说说你遇到的Chrome地址栏现象:现代浏览器(包括Chrome)出于安全考虑,会自动隐藏URL中的用户信息部分(也就是username@或username:password@),所以你输入后地址栏里的这部分会消失,但这不代表请求没发送这部分信息。
然后回到核心问题:Flask是可以获取到这部分用户名和密码的,但不是直接从URL字符串里提取,而是通过HTTP基本认证的机制。具体来说:
- 当你用
http://username:password@myapp.com/格式访问时,浏览器会自动把username:password编码成Base64格式,放在请求头的Authorization字段里发送给服务器。 - 在Flask中,你可以通过
request.authorization对象来获取这些信息:from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): auth = request.authorization if auth: return f"用户名: {auth.username}, 密码: {auth.password}" return "未提供认证信息"
你本地测试时只输入了username@(没带密码),可能导致浏览器没有正确发送认证头,所以request对象里没有相关内容。建议测试时完整输入http://username:testpassword@localhost:5000/,再试试上面的代码,应该就能拿到信息了。
另外补充一点:RFC3986定义的URL用户信息部分,在WSGI服务器(比如Flask默认的Werkzeug)处理时,通常会被转换成HTTP Basic认证的请求头,而不会保留在URL的可见字段中,所以你直接从request.url里是看不到这部分的,必须通过request.authorization来获取。
最后要说明的是,这个问题已经被标记为Flask相关问题的重复项,类似的问题之前已经有过详细的讨论哦。
内容的提问来源于stack exchange,提问作者Arnaud
相关产品推荐
相关产品推荐

