Работает ли make-socks-proxied-conn-manager в clj-http?

Я обновляю большой проект, который использует clj-http, и последняя версия (3.7.0) не работает для меня.

Функция clj-http.conn-mgr/make-socks-proxied-conn-manager была вызвана с аргументами хоста и порта. Однако это дает трассировку стека, происходящую из HttpClient SSLConnectionSocketFactory, жалуясь на недопустимый нулевой контекст.

Глядя на код для make-socks-proxied-conn-manager, я вижу это:

(defn make-socks-proxied-conn-manager
  "Given an optional hostname and a port, create a connection manager that's
  proxied using a SOCKS proxy."
  ([^String hostname ^Integer port] (make-socks-proxied-conn-manager hostname port {}))
  ([^String hostname ^Integer port {:keys [keystore keystore-type keystore-pass trust-store trust-store-type trust-store-pass] :as opts}]
   (let [socket-factory #(socks-proxied-socket hostname port)
         ssl-context (when (some (complement nil?) [keystore keystore-type keystore-pass trust-store trust-store-type trust-store-pass])
                           (-> opts get-keystore-context-verifier :context))
         reg (-> (RegistryBuilder/create)
                 (.register "http" (PlainGenericSocketFactory socket-factory))
                 (.register "https" (SSLGenericSocketFactory socket-factory ssl-context))
                 (.build))]
     (PoolingHttpClientConnectionManager. reg))))

Когда это вызывается с host/port, то вызывается первая arity, которая просто переходит ко второй с пустыми опциями. Это приводит к тому, что var ssl-context всегда равен nil. Когда функция для SSLGenericSocketFactory вызывается с 2 параметрами, она создает SSLConnectionSocketFactory из библиотеки HttpClient, передавая нулевой контекст. Но эта библиотека не принимает нулевой аргумент SSLContext, и это то, что приводит к моей трассировке стека.

В нынешнем виде это выглядит так, что форма с двумя аргументами make-socks-proxied-conn-manager всегда потерпит неудачу. Или я что-то упустил?

0 ответов

Другие вопросы по тегам