在python中使用身份验证连接到套接字

时间:2011-06-30 20:09:58

标签: python sockets mongodb http-authentication

我正在尝试通过python套接字连接到mongodb实例。网址看起来像这样

用户名:password@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)

编辑 - 我问的原因是因为asyncmongo现在不支持这种类型的网址。我想看看我是否可以写一个补丁。 asyncmongo库使用类似上面代码中的套接字连接。

1 个答案:

答案 0 :(得分:2)

您应该使用驱动程序连接到mongodb。如果您正在使用Tornado(看起来您打算这样做),请尝试asyncmongo;如果您使用的是线程Web服务器/应用程序框架(Django,Pylons等),则可以直接使用PyMongo


编辑:至于为什么此代码不起作用,socket模块不接受连接的网址,只接受主机名和端口。这是一个低级库。要连接到(网络)网址,请考虑使用urllib2httplib


编辑2: MongoDB中的身份验证不在传输级别处理,而是在应用程序级别处理。我建议你先阅读Implementing Authentication in a Driver,然后看看PyMongo如何实现身份验证(在connection.pydatabase.py中)。您还需要为asyncmongo移植或重新实现MongoDB连接URI解析,该文档记录为here