Moje pytanie dotyczy specyfikacji how can i validate username password for mongodb authentication through pymongo?.Jak uciec @ w haśle w połączeniu pymongo?
Próbuję połączyć się z instancją MongoDB za pomocą PyMongo 3.2.2 i adresu URL zawierającego użytkownika i hasło, jak wyjaśniono w MongoDB Docs. Różnica polega na tym, że używane przeze mnie hasło zawiera znak "@".
Na początku po prostu starał się połączyć bez ucieczki, tak:
prefix = 'mongodb://'
user = 'user:[email protected]_'
suffix = '@127.0.0.1:27001/'
conn = pymongo.MongoClient(prefix + user + suffix)
Naturalnie mam następujący błąd:
InvalidURI: ':' or '@' characters in a username or password must be escaped according to RFC 2396.
Więc próbowałem uciec użytkownika: przekazać część korzystając urllib.quote() jak to:
prefix = 'mongodb://'
user = urllib.quote('user:[email protected]_')
suffix = '@127.0.0.1:27001/'
conn = pymongo.MongoClient(prefix + user + suffix)
, ale potem otrzymałem:
OperationFailure: Authentication failed.
(Ważne, aby powiedzieć, że przy użyciu GUI Management Tool MongoDB (Robomongo, jeśli to ma znaczenie) Jestem w stanie połączyć się z MongoDB użyciu (Real) adres i poświadczeń.)
zmienna użytkownika Drukowanie w powyższym kodzie wygenerowany został ciąg znaków 'user:passw_with_%40_'
(czyli "@" stał się "% 40") i zgodnie z wikipedia jest to oczekiwany efekt ucieczki.
Próbowałem nawet uniknąć znaku @ za pomocą pojedynczych i podwójnych ukośników (user = 'user:passw_with_\\@_'
i user = 'user:passw_with_\@_'
), ale te nie powiodły się z wyjątkiem wyjątku InvalidURI.
TL; DR;
Moje pytanie brzmi: Jak mogę uciec "@" w części hasła adresu URL MongoDB?
Python 3: 'urllib.parse.quote' – luckydonald