我的问题是关于如何通过 pymongo 验证 mongodb 身份验证的用户名密码的规范?.
我正在尝试使用 PyMongo 3.2.2 和包含用户和密码的 URL 连接到 MongoDB 实例,如MongoDB Docs中所述。不同之处在于我使用的密码包含一个“@”。
起初我只是尝试连接而不转义,如下所示:
前缀 = 'mongodb://'
用户 = '用户:passw_with_@_'
后缀 = '@127.0.0.1:27001/'
conn = pymongo.MongoClient(前缀 + 用户 + 后缀)
自然我得到了以下错误:
InvalidURI: ':' or '@' characters in a username or password must be escaped according to RFC 2396.
所以我尝试使用urllib.quote()转义 user:pass 部分,如下所示:
前缀 = 'mongodb://'
用户 = urllib.quote('user:passw_with_@_')
后缀 = '@127.0.0.1:27001/'
conn = pymongo.MongoClient(前缀 + 用户 + 后缀)
但后来我得到了一个:
OperationFailure: Authentication failed.
(重要的是,使用 GUI MongoDB 管理工具(Robomongo,如果这很重要的话)我可以使用(真实)地址和凭据连接到 MongoDB。)
在上面的代码中打印用户变量会生成一个'user:passw_with_%40_'
字符串(即 '@' 变为 '%40'),根据维基百科,这是预期的转义。
我什至尝试使用单反斜杠和双反斜杠 ( user = 'user:passw_with_\\@_'
and user = 'user:passw_with_\@_'
) 转义 @,但那些因 InvalidURI 异常而失败。
TL;博士;
我的问题是:如何在 MongoDB URL 的密码部分中转义“@”?