0

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

使用java.net.URL,我可以很好地检索到:

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

同上 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's Encrypt。但是,其他 Let's Encrypt 网站似乎可以工作:

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

证书具有不同的属性,但来自同一机构。

此外,如果我包含:insecure? true,错误仍然会发生。

我认为这可能与此 HTTPS + 代理错误有关,因为症状相似并且 Google App Engine 似乎正在对站点进行负载平衡。但是,此修复程序已发布到 2.2.0 版本中。

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

  • openjdk 版本“1.8.0_92-internal”
  • Clojure 版本 1.8.0
  • http-kit 版本“2.2.0”
4

1 回答 1

0

看起来这是由 SNI(服务器名称识别)引起的。我使用了 HTTP Kit 版本“2.3.0-alpha5”并关注了这篇博文。现在可以了。

于 2018-02-07T14:41:12.270 回答