我的问题是how can i validate username password for mongodb authentication through pymongo?的规格.
我正在try 使用PyMongo 3.2.2和包含用户和密码的URL连接到MongoDB实例,如MongoDB Docs中所述.区别在于我使用的密码包含一个"@".
一开始,我只是试着在不逃跑的情况下连接,就像这样:
前缀='mongodb://'
user='user:passw_with_@'
后缀="@127.0.0.1:27001/"
康涅狄格州=pymongo.MongoClient(前缀+用户+后缀)
很自然,我犯了以下错误:
InvalidURI: ':' or '@' characters in a username or password must be escaped according to RFC 2396.
所以我试着避开用户:使用urllib.quote()传递部分,如下所示:
前缀='mongodb://'
user=urllib.引号('user:passw_with_@u')
后缀="@127.0.0.1:27001/"
康涅狄格州=pymongo.MongoClient(前缀+用户+后缀)
但后来我得到了一个:
OperationFailure: Authentication failed.
(重要的是,使用GUI MongoDB管理工具(Robomongo,如果需要的话),我可以使用(真实的)地址和凭据连接到MongoDB.)
在上面的代码中打印用户变量生成了'user:passw_with_%40_'
字符串(即"@"变成了"%40"),根据wikipedia,这是预期的转义.
我甚至try 用单反斜杠和双反斜杠(user = 'user:passw_with_\\@_'
和user = 'user:passw_with_\@_'
)逃离@,但那些都失败了,出现了InvalidURI异常.
TL;DR;
我的问题是:如何在MongoDB URL的密码部分转义"@"?