使用“tornado.httpclient”获取“POST https”站点出现“HTTPError: HTTP 599”

4 投票
2 回答
8212 浏览
提问于 2025-04-17 17:09

我想用 "tornado.httpclient.AsyncHTTPClient" 向一个 "https" 网站发送一个 "POST" 请求,但遇到了问题:

HTTPError: HTTP 599: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed  

当我用 "urllib" 代替的时候(用的还是同样的网址和参数,头信息我不太清楚)可以正常工作。
代码大概是这样的:

url = r'https://**********.com/****/'
request = tornado.httpclient.HTTPRequest(url = url, method = 'POST', body = body, headers = headers)
client = tornado.httpclient.AsyncHTTPClient()
client.fetch(request, callback = on_reqeust)
tornado.ioloop.IOLoop.instance().start()

2 个回答

1

你还可以更新SimpleAsyncHTTPClient使用的CA证书文件。

这个文件通常在

site-packages/tornado/ca-certificates.crt

我遇到的问题是,把文件/etc/ssl/certs/ca-certificates.crt复制到tornado的那个位置就解决了。

注意:这样做会有帮助,如果你有有效的证书,但你的证书颁发机构没有被tornado识别的话。

4
request = tornado.httpclient.HTTPRequest(url=url, method='POST', body=body,
                                         validate_cert=False)
#tornado.httpclient.AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")

在生成一个HTTP请求时,添加“validate_cert=False”这个选项。
而且似乎不需要使用curl_httpclient。

撰写回答