Very minimal http client based on ok-http
RING1 style api
(require '[s-exp.ok-http :as http])
;; create a new client instance
(def client (http/client {}))
(http/request client {:method :get
:url "https://httpbin.org/get"})
(http/request {:method :get
:url "https://httpbin.org/get"})
(def my-client (http/client {:read-timeout 1000}))
(http/request my-client {:method :get :url "https://httpbin.org/get"})
(http/request {:method :post
:url "https://httpbin.org/post"
:headers {"Content-Type" "application/json"}
:body "{\"foo\": \"bar\"}"})
(http/request {:method :get
:url "https://httpbin.org/get"
:query-params {:foo "bar" :baz [1 2]}})
;; default (:byte-stream) returns InputStream (MUST consume fully)
(def resp (http/request {:url "https://httpbin.org/get"}))
(slurp (:body resp))
;; To force eager string decoding:
(def resp (http/request {:url "https://httpbin.org/get"
:response-body-decoder :string}))
(:body resp) ;=> ...contents as string
;; throw on 4xx/5xx by default:
(try
(http/request {:url "https://httpbin.org/status/404"})
(catch Exception e
(println "Error:" (.getMessage e))))
;; to return the response (even if error status):
(http/request {:url "https://httpbin.org/status/404"
:throw-on-error false})
ok-http is available on Clojars.
Add this to your dependencies:
Copyright © 2025 S-Exp
Distributed under the Eclipse Public License version 1.0.