Python Requests requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol

6 浏览
0 Comments

Python Requests requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol

我正在使用Ubuntu 12.10,OpenSSL 1.0.1c,Python 2.7.3,Requests 1.0.3和1.0.4(尝试了两个版本)。当尝试使用以下代码连接到url变量中的网站时,报错如下:

代码:

def SendInitialRequest(xmlmessage, redirecturl):

url = 'https://centineltest.cardinalcommerce.com/maps/txns.asp'

payload = 'cmpi_msg=' + ET.tostring(xmlmessage)

headers = {

'Content-Type': 'application/x-www-form-urlencoded',

}

r = requests.post(url, data=payload, headers=headers, verify=None)

print r.text

错误信息:

Traceback (most recent call last):

File "", line 1, in

File "clams/libs/centinel/thinclient.py", line 134, in SendInitialRequest

r = requests.post(url, data=payload, headers=headers, verify=None)

File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/api.py", line 87, in post

return request('post', url, data=data, **kwargs)

File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/api.py", line 44, in request

return session.request(method=method, url=url, **kwargs)

File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/sessions.py", line 269, in request

resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)

File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/sessions.py", line 364, in send

r = adapter.send(request, **kwargs)

File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/adapters.py", line 163, in send

raise SSLError(e)

requests.exceptions.SSLError: [Errno 8] _ssl.c:504: 协议违反发生EOF

通过openssl尝试连接返回如下信息:

$ openssl s_client -connect centineltest.cardinalcommerce.com:443

CONNECTED(00000003)

140019346777760:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:

---

没有可用的对等证书

---

未发送客户端证书CA名称

---

SSL握手读取了0字节并写入了226字节

---

新的,(无),密码是(无)

不支持安全重协商

压缩:无

扩展:无

---

如果我强制使用tls1,它就可以工作(输出已截断):

$ openssl s_client -tls1 -connect centineltest.cardinalcommerce.com:443

CONNECTED(00000003)

depth=2 C = US, O = "thawte, Inc.", OU = Certification Services Division, OU

verify error:num=20:unable to get local issuer certificate

verify return:0

---

0