Подключение к сокету с аутентификацией в python - PullRequest
1 голос
/ 01 июля 2011

Я пытаюсь подключиться к экземпляру mongodb через сокет python.URL выглядит следующим образом:

имя пользователя: пароль@host.com: порт

как я могу подключиться к нему с помощью Python-сокета?

Следующий код дает мне эту ошибку: [Errno -5] Нет адреса, связанного с именем хоста

import socket
import tornado

full_url = '%s:%s@%s' % (username, password, host)
s = socket.socket()
s.connect((full_url, port))
stream = iostream.IOStream(s)

EDIT - я спрашиваю, потому что asyncmongo не поддерживает этот тип URL прямо сейчас.Я пытаюсь понять, смогу ли я написать патч.Библиотека asyncmongo подключается с использованием сокета, подобного тому, что представлен в коде выше.

1 Ответ

2 голосов
/ 01 июля 2011

Вы должны использовать драйвер для подключения к mongodb.Если вы используете Tornado (похоже, вы собираетесь это сделать), попробуйте asyncmongo ;если вы используете многопоточный веб-сервер / каркас приложений (Django, Pylons и т. д.), вы можете использовать PyMongo напрямую.


Редактировать: Почему?этот код не работает, модуль socket не принимает URL-адреса для подключения, только имя хоста и порт.Это библиотека низкого уровня.Чтобы подключиться к (веб) URL-адресам, рассмотрите возможность использования urllib2 или httplib .


Edit 2: Аутентификация в MongoDB не обрабатываетсяна транспортном уровне это обрабатывается на уровне приложений.Я предлагаю вам сначала прочитать Реализация аутентификации в драйвере , а затем взглянуть на то, как PyMongo реализует аутентификацию (в connection.py и database.py ).Вам также нужно будет перенести или переопределить разбор URI соединения MongoDB для asyncmongo, что задокументировано здесь .

...