You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:39:25