Chr*_*ris 7 python ssl 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
Run Code Online (Sandbox Code Playgroud)
我这样构建我的请求:
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)
Run Code Online (Sandbox Code Playgroud)
要为此添加另一个层,它正在我们的开发服务器上运行,该服务器具有httplib 2.6并且在httplib.HTTPSConnection中没有source_address参数.
任何帮助是极大的赞赏.
================================================== =========
编辑:
我可以从命令行运行它.显然这是某种权限问题.任何想法我需要授予哪些用户才能实现这一目标?Apache可能无法打开端口?
oar*_*alo 15
作为(明显的)抬头,也可以通过在host参数中包含协议来触发同样的错误.例如这段代码:
conn = httplib.HTTPConnection("http://secure.authorize.net", 80, ....)
Run Code Online (Sandbox Code Playgroud)
即使您的所有网络设置都正确,也会导致"gaierror:[Errno -2]名称或服务未知"错误.
gaierror:[Errno -2]姓名或服务未知
此错误通常表示DNS解析程序失败.是否ping secure.authorize.net
从收到gaierror的同一台服务器返回成功的回复?主机名中是否有拼写错误?
问题最终归结为 selinux 阻止 apache 获取该端口。禁用 selinux 解决了问题。后来我遇到了一个问题,我没有 /var/www/.python-eggs/,所以 MySQLdb 在导入时进行了处理。但经过 mkdir 后,它被修复了。