2013-02-26 222 views
2

我想使用「tornado.httpclient.AsyncHTTPClient」發送一個「POST」請求到「https」網站,但得到:使用「tornado.httpclient」獲取「POST https」網站獲取「HTTPError:HTTP 599」

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

它的工作原理,當我用 「的urllib」,而不是(用相同的URL和參數,頭我不知道)
這樣的代碼:

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() 
+0

您的蟒蛇版本'> 2.6'?如果沒有 - 在獲取之前嘗試'client.configure(「tornado.curl_httpclient.CurlAsyncHTTPClient」)''。 – 2013-02-26 12:13:32

+0

添加,但不存在 – sunnyxx 2013-02-26 13:19:41

+0

然後嘗試'客戶端= tornado.httpclient.AsyncHTTPClient(disable_ssl_certificate_validation = TRUE)'.. – 2013-02-27 15:38:39

回答

1
request = tornado.httpclient.HTTPRequest(url=url, method='POST', body=body, 
             validate_cert=False) 

添加「validate_cert =虛假「時產生一個http請求
,似乎沒有必要使用curl_httpclient:由SimpleAsyncHTTPClient使用

#tornado.httpclient.AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient") 
+2

請注意,如果您忽略SSL證書有效性,那麼使用HTTPS而不是HTTP(沒有額外的安全性)沒有意義 - 所以正確的解決方案是解決證書問題。 YMMV當然。 – johndodo 2013-05-31 06:59:27

+2

雖然證書可能無效,但通信仍將通過加密ssl通道進行。 – tigeronk2 2013-11-10 19:10:11

1

您還可以更新CA證書文件。 應位於

site-packages/tornado/ca-certificates.crt

在我的情況下複製文件/etc/ssl/certs/ca-certificates.crt龍捲風的位置解決了這個問題。

注意:如果您擁有有效的證書,但您的證書頒發機構未被龍捲風識別,則會有所幫助。