使用“tornado.httpclient”获取“POST https”站点出现“HTTPError: HTTP 599”
我想用 "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。