Как экранировать @ в пароле при подключении к 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?

Ответы на вопрос(2)

Ваш ответ на вопрос