【发布时间】:2012-12-15 15:52:09
【问题描述】:
我在 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 "<stdin>", line 1, in <module>
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 occurred in violation of protocol
尝试使用 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:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 226 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
如果我强制它使用 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
---
为此,我见过很多bug reports;但是,我还没有找到使用 python requests 库解决它的方法。任何帮助将不胜感激。
【问题讨论】:
-
你是通过包管理器安装openssl的吗?如果是,您是否检查了更新?我可以使用请求连接到该站点。
-
我确实通过包管理器安装了 openssl,没有更新。你能分享你正在使用的所有东西的版本吗?你是使用内置的python还是使用pythonbrews等来构建你自己的?
-
就我而言,答案是这样的:stackoverflow.com/a/34891294/5953624
-
我在尝试使用 HTTPS 连接到 HTTP 端点时遇到此错误。我刚刚更改了网址,它工作正常。
标签: python openssl httprequest python-requests ubuntu-12.10