Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

304
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda