Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

306
Views
¿Cómo escapar @ en una contraseña en la conexión pymongo?

Mi pregunta es una especificación de cómo puedo validar la contraseña del nombre de usuario para la autenticación mongodb a través de pymongo. .

Estoy tratando de conectarme a una instancia de MongoDB usando PyMongo 3.2.2 y una URL que contiene el usuario y la contraseña, como se explica en MongoDB Docs . La diferencia es que la contraseña que estoy usando contiene una '@'.

Al principio simplemente traté de conectarme sin escapar, así:

prefijo = 'mongodb://'

usuario = 'usuario:contraseña_con_@_'

sufijo = '@127.0.0.1:27001/'

conn = pymongo.MongoClient(prefijo + usuario + sufijo)

Naturalmente, obtuve el siguiente error:

 InvalidURI: ':' or '@' characters in a username or password must be escaped according to RFC 2396.

Así que intenté escapar de la parte del usuario: pase usando urllib.quote () de esta manera:

prefijo = 'mongodb://'

usuario = urllib.quote('usuario:contraseña_con_@_')

sufijo = '@127.0.0.1:27001/'

conn = pymongo.MongoClient(prefijo + usuario + sufijo)

pero luego obtuve un:

 OperationFailure: Authentication failed.

(Es importante decir que al usar una herramienta de administración GUI MongoDB ( Robomongo , si eso importa) puedo conectarme a MongoDB usando la dirección (real) y las credenciales).

La impresión de la variable de usuario en el código anterior generó una 'user:passw_with_%40_' (es decir, '@' se convirtió en '% 40') y, según wikipedia , ese es el escape esperado.

Incluso intenté escapar de @ con barras invertidas simples y dobles ( user = 'user:passw_with_\\@_' y user = 'user:passw_with_\@_' ), pero fallaron con la excepción InvalidURI.

TL;RD;

Mi pregunta es: ¿Cómo escapo una '@' en la parte de la contraseña de una URL de MongoDB?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Debería poder escapar de la contraseña usando urllib.quote() . Aunque solo debe citar/escapar la contraseña y excluir el nombre de username: ; de lo contrario, : también se escapará a %3A .

Por ejemplo:

 import pymongo import urllib mongo_uri = "mongodb://username:" + urllib.quote("p@ssword") + "@127.0.0.1:27001/" client = pymongo.MongoClient(mongo_uri)

El fragmento anterior se probó para MongoDB v3.2.x, Python v2.7 y PyMongo v3.2.2.

El ejemplo anterior asumido en la cadena de conexión URI de MongoDB :

  • El usuario se crea en la base de datos de admin .
  • El host mongod en el que se ejecuta es 127.0.0.1 (localhost)
  • El puerto mongod asignado es 27001

Para Python 3.x, puede utilizar urllib.parse.quote() para reemplazar caracteres especiales en su contraseña usando el escape %xx . Un ejemplo de lo mismo:

 urllib.parse.quote("p@ssword")
over 4 years ago · Santiago Trujillo Report

0

Python 3.6.5: versión de PyMongo 3.7.0 para conectarse a una instancia de mlab :

 from pymongo import MongoClient import urllib.parse username = urllib.parse.quote_plus('username') password = urllib.parse.quote_plus('password') client = MongoClient('mongodb://%s:%s@ds00000.mlab.com:000000/recipe_app_testing' % (username, password))

Esta es la única forma en que he logrado conectarme a la instancia de mlab MongoDB sin usar la aplicación hilada de pymongo del matraz, necesitaba crear accesorios para las pruebas unitarias.

Python 3.6.5 - PyMongo 3.7.0 versión localhost:

 from pymongo import MongoClient import urllib.parse username = urllib.parse.quote_plus('username') password = urllib.parse.quote_plus('password') client = MongoClient('mongodb://%s:%s@127.0.0.1:27001/' % (username, password))
over 4 years ago · Santiago Trujillo Report

0

ejecutar en la terminal:

 python -m pip install pymongo[srv]

archivo pitón:

 import pymongo from pymongo import MongoClient import urllib.parse username = urllib.parse.quote_plus('username') password = urllib.parse.quote_plus("password") url = "mongodb+srv://{}:{}@cluster0-0000.mongodb.net/<dbname>?retryWrites=true&w=majority".format(username, password) # url is just an example (your url will be different) cluster = MongoClient(url) db = cluster['Sample'] collection = db['temporary']
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!