Работает ли 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 всегда потерпит неудачу. Или я что-то упустил?