我正在尝试使用tornado的http客户端获取URL。我以前做过很多次,但这次遇到了一个非常奇怪的SSL错误。我尝试使用的端点没有有效的证书,但是curl调用中的-k仍然证明它是有效的。在
$ curl https://myhostname.com:9001
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
$ curl https://myhostname.com:9001 -k
404 page not found
我在网上找到的所有答案都建议将validate\u cert设置为False(我已经在做了)。但是,当我尝试做我认为在tornado的httpclient(validate\u cert=False)中是等效的时,我仍然得到一个非常奇怪的错误。下面是一段代码的测试片段:
^{pr2}$结果如下:
WARNING:tornado.general:SSL Error on 6 ('myhostname.com', 9001): [Errno 1] _ssl.c:499: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Traceback (most recent call last):
File "./test.py", line 17, in <module>
make_call()
File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/gen.py", line 140, in wrapper
result = func(*args, **kwargs)
File "./test.py", line 13, in make_call
response = tornado.httpclient.HTTPClient().fetch(request)
File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/httpclient.py", line 85, in fetch
self._async_client.fetch, request, **kwargs))
File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/ioloop.py", line 370, in run_sync
return future_cell[0].result()
File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/concurrent.py", line 65, in result
raise self._exception
tornado.httpclient.HTTPError: HTTP 599: [Errno 1] _ssl.c:499: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
不幸的是,我的端点不是公共的,所以我无法提供生成此错误所使用的确切代码。在
有没有人看到这个错误,或者有解决办法?在
谢谢
这看起来可能与https://github.com/facebook/tornado/blob/fd4d8997a772829b8439322dbce45091bc51beaf/tornado/simple_httpclient.py#L196处的逻辑有关 已知的一个问题是,
tornado.simple_httpclient
无法连接到Python2.6上的某些服务器,这看起来是相同的错误消息,但我以前在Python2.7上没有见过这种故障。在尝试将
ssl_options={"ssl_version": ssl.PROTOCOL_TLSv1}
传递给HTTP请求。您也可以尝试使用tornado.curl_httpclient
来实现一个更可能处理不太常见的服务器配置的替代实现。在相关问题 更多 >
编程相关推荐