HTTPKit给出了ProtocolException:" No status"对于Let的加密站点

时间:2018-02-07 12:12:21

标签: clojure http-kit

我正在尝试检索网址。在撰写本文时:https://upvote.pub/

使用java.net.URL,我可以检索到这个罚款:

=> (count (slurp (.openStream (java.net.URL. "https://upvote.pub/"))))
44353

Ditto clj-http:

=> (count (:body (clj-http.client/get "https://upvote.pub/")))
44353

但是当我使用HTTPKit时遇到了问题:

=> @(http/get "https://upvote.pub/")
{:opts {:method :get, :url "https://upvote.pub/"}, :error #error {
 :cause "No status"
 :via
 [{:type org.httpkit.ProtocolException
   :message "No status"
   :at [org.httpkit.client.RespListener onCompleted "RespListener.java" 126]}]
 :trace
 [[org.httpkit.client.RespListener onCompleted "RespListener.java" 126]
  [org.httpkit.client.Request finish "Request.java" 51]
  [org.httpkit.client.HttpClient doRead "HttpClient.java" 156]
  [org.httpkit.client.HttpClient run "HttpClient.java" 426]
  [java.lang.Thread run "Thread.java" 745]]}}

此网站使用了我们的加密功能。但是,其他Let的加密网站似乎有效:

=> (-> "https://letsencrypt.org/" http/get deref :body count)
21490

证书具有不同的属性,但它来自同一权限。

此外,如果我包含:insecure? true,则错误仍然存​​在。

我认为这可能与this HTTPS + proxy bug有关,因为症状相似且Google App Engine似乎负载均衡网站。但是,此修复程序已归入release 2.2.0

这是HTTP-Kit的错误吗?我可以解决它吗?

  • openjdk version" 1.8.0_92-internal"
  • Clojure版本1.8.0
  • http-kit版本" 2.2.0"

1 个答案:

答案 0 :(得分:0)

看起来这是由SNI(服务器名称识别)引起的。我使用HTTP Kit版本“2.3.0-alpha5”并跟随this blog post。它现在有效。