clj-http is a popular Clojure library for making HTTP requests, built as a wrapper around Apache’s HttpClient. It uses Ring-style request/response maps and middleware, fitting seamlessly into idiomatic Clojure applications. clj-http allows coercing the body of the request either before it is sent (input coercion), or after it’s received (output coercion) from the server. By default, JSON coercion is only applied when the response’s status is considered “unexceptional”. If the :unexceptional-status option is provided, then its value is a function that specifies what status codes are unexceptional. Rather than forcing all request headers to be lowercase strings, clj-http allows strings or keywords of any case. Keywords will be transformed into their canonical representation, so the :content-md5 header will be sent to the server as “Content-MD5”, for instance. String keys in request headers, however, will be sent to the server with their casing unchanged.
Features
- Supports all major HTTP methods: GET, POST, PUT, DELETE, PATCH, etc.
- Uses Ring-style maps for requests and responses, with middleware support
- Convenience functions (get, post, etc.) as sugar for core request API
- Integrates with standard HTTP clients via Apache HttpComponents
- Easily configurable headers, timeouts, body parsing, etc.
- Widely used and easily included via Maven, Leiningen, or Clojure CLI