Как экранировать @ в пароле при подключении к pymongo?
Мой вопрос является спецификациейКак я могу проверить пароль пользователя для аутентификации mongodb через pymongo?.
Я пытаюсь подключиться к экземпляру MongoDB, используя PyMongo 3.2.2 и URL-адрес, содержащий пользователя и пароль, как описано вMongoDB Docs, Разница в том, что пароль, который я использую, содержит «@».
Сначала я просто попытался подключиться без выхода, вот так:
prefix = 'mongodb: //'
user = 'user: 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 () как это:
prefix = 'mongodb: //'
user = urllib.quote ('user: passw_with _ @ _')
суффикс = '@ 127.0.0.1: 27001 /'
conn = pymongo.MongoClient (префикс + пользователь + суффикс)
но потом я получил:
OperationFailure: Authentication failed.
(Важно сказать, что с помощью GUI MongoDB Management Tool (Robomongo, если это имеет значение) Я могу подключиться к MongoDB, используя (реальный) адрес и учетные данные.)
Печать пользовательской переменной в приведенном выше коде сгенерировала'user:passw_with_%40_'
Строка (то есть «@» стала «% 40») и в соответствии свикипедия это ожидаемое побег.
Я даже пытался избежать @ с одинарной и двойной обратной косой чертой (user = 'user:passw_with_\\@_'
а такжеuser = 'user:passw_with_\@_'
), но не удалось с исключением InvalidURI.
TL; DR;
Мой вопрос: как мне избежать "@" в парольной части MongoDB URL?