python httplib 名称或服务未知
我正在尝试使用httplib来发送信用卡信息到authorize.net。当我尝试发送请求时,出现了以下错误信息:
File "./lib/cgi_app.py", line 139, in run res = method()
File "/var/www/html/index.py", line 113, in ProcessRegistration conn.request("POST", "/gateway/transact.dll", mystring, headers)
File "/usr/local/lib/python2.7/httplib.py", line 946, in request self._send_request(method, url, body, headers)
File "/usr/local/lib/python2.7/httplib.py", line 987, in _send_request self.endheaders(body)
File "/usr/local/lib/python2.7/httplib.py", line 940, in endheaders self._send_output(message_body)
File "/usr/local/lib/python2.7/httplib.py", line 803, in _send_output self.send(msg)
File "/usr/local/lib/python2.7/httplib.py", line 755, in send self.connect()
File "/usr/local/lib/python2.7/httplib.py", line 1152, in connect self.timeout, self.source_address)
File "/usr/local/lib/python2.7/socket.py", line 567, in create_connection raise error, msg
gaierror: [Errno -2] Name or service not known
我这样构建我的请求:
mystring = urllib.urlencode(cardHash)
headers = {"Content-Type": "text/xml", "Content-Length": str(len(mystring))}
conn = httplib.HTTPSConnection("secure.authorize.net:443", source_address=("myurl.com", 443))
conn.request("POST", "/gateway/transact.dll", mystring, headers)
为了进一步说明,这个请求在我们的开发服务器上是可以正常工作的,那里的httplib版本是2.6,并且在httplib.HTTPSConnection中没有使用source_address参数。
非常感谢任何帮助。
===========================================================
编辑:
我可以从命令行运行这个程序。显然,这是某种权限问题。你们有什么想法,我需要给哪些用户授予什么权限才能解决这个问题?可能是Apache无法打开这个端口?
4 个回答
8
gaierror: [错误号 -2] 名称或服务未知
这个错误通常意味着你的DNS解析器出现了问题。你可以试着用 ping secure.authorize.net
命令来检查一下,看看是否能从同一个服务器收到成功的回复。如果不能,那可能是因为你输入的主机名有拼写错误。
19
首先提醒一下,这个错误也可能是因为在主机参数中包含了协议导致的。比如说下面这段代码:
conn = httplib.HTTPConnection("http://secure.authorize.net", 80, ....)
即使你的网络设置都没问题,它也会出现“gaierror: [Errno -2] Name or service not known”的错误。
1
问题的根本原因是selinux阻止了apache访问那个端口。关闭selinux后,问题就解决了。后来我遇到一个问题,就是没有这个文件夹/var/www/.python-eggs/,导致MySQLdb在导入时出错。不过在创建了这个文件夹之后,问题就解决了。