A Clojure HTTP library wrapping the Apache HttpComponents client.
This library has taken over from mmcgrana's clj-http. Please send a pull request or open an issue if you have any problems
The main HTTP client functionality is provided by the
clj-http.client
namespace:
(require '[clj-http.client :as client])
The client supports simple get
, head
, put
, post
, and delete
requests. Responses are returned as Ring-style response maps:
(client/get "http://google.com")
=> {:status 200
:headers {"date" "Sun, 01 Aug 2010 07:03:49 GMT"
"cache-control" "private, max-age=0"
"content-type" "text/html; charset=ISO-8859-1"
...}
:body "<!doctype html>..."}
More example requests:
(client/get "http://site.com/resources/id")
(client/get "http://site.com/resources/3" {:accept :json})
(client/post "http://site.com/resources" {:body byte-array})
(client/post "http://site.com/resources" {:body "string"})
(client/get "http://site.com/protected" {:basic-auth ["user" "pass"]})
(client/get "http://site.com/search" {:query-params {"q" "foo, bar"}})
(client/get "http://site.com/favicon.ico" {:as :byte-array})
(client/post "http://site.com/api"
{:basic-auth ["user" "pass"]
:body "{\"json\": \"input\"}"
:headers {"X-Api-Version" "2"}
:content-type :json
:socket-timeout 1000
:conn-timeout 1000
:accept :json})
A more general request
function is also available, which is useful
as a primitive for building higher-level interfaces:
(defn api-action [method path & [opts]]
(client/request
(merge {:method method :url (str "http://site.com/" path)} opts)))
The client will throw exceptions on, well, exceptional status codes:
(client/get "http://site.com/broken")
=> Exception: 500
The client will also follow redirects on the appropriate 30*
status
codes.
The client transparently accepts and decompresses the gzip
and
deflate
content encodings.
A proxy can be specified by setting the Java properties:
<scheme>.proxyHost
and <scheme>.proxyPort
where <scheme>
is the client
scheme used (normally 'http' or 'https').
clj-http
is available as a Maven artifact from
Clojars:
[clj-http "0.2.0"]
Previous version available as
[clj-http "0.1.3"]
The design of clj-http
is inspired by the
Ring protocol for Clojure HTTP
server applications.
The client in clj-http.core
makes HTTP requests according to a given
Ring request map and returns Ring response maps corresponding to the
resulting HTTP response. The function clj-http.client/request
uses
Ring-style middleware to layer functionality over the core HTTP
request/response implementation. Methods like clj-http.client/get
are sugar over this clj-http.client/request
function.
To run the tests:
$ lein deps
$ lein test
Run all tests (including integration):
$ lein test :all
Run tests against 1.2.1 and 1.3
$ lein multi deps
$ lein multi test
$ lein multi test :all
Released under the MIT License: http://www.opensource.org/licenses/mit-license.php