A ClojureScript HTTP library.
Via Clojars: http://clojars.org/cljs-http
(ns example.core
(:require-macros [cljs.core.async.macros :refer [go]])
(:require [cljs-http.client :as http]
[cljs.core.async :refer [<!]]))
The http functions will return a channel:
(go (let [response (<! (http/get "https://api.github.com/users" {:with-credentials? false}
:query-params {"since" 135}}))]
(prn (:status response))
(prn (map :login (:body response)))))
You can pass a channel for the result to be written on. This is usefull when using a transducer:
(http/get "http://example.com" {:channel (chan 1 (map :body))})
POSTing automatically sets Content-Type header and serializes
You can send the body params in mutiple formats:
(http/post "http://example.com" {:edn-params {:foo :bar}})
(http/post "http://example.com" {:json-params {:foo :bar}})
;;(JSON is auto-converted via `cljs.core/clj->js`)
(http/post "http://example.com" {:transit-params {:key1 "value1" :key2 "value2"}})
(http/post "http://example.com" {:form-params {:key1 "value1" :key2 "value2"}})
To send form parameters (an array of values):
(http/post "http://example.com" {:form-params {:key1 [1 2 3] :key2 "value2"}})
To upload a file using Multipart parameters:
(http/post "http://example.com" {:multipart-params {:key1 "value1" :my-file my-file}})
Where my-file
can be one of:
-
a Blob instance, eg:
(let [my-file (js/Blob. #js ["<h1>Hello</h1>"] #js {:type "text/html})] ...)
-
a File instance, eg:
HTML: <input id="my-file" type="file"> (let [my-file (-> (.getElementById js/document "my-file") .-files first)] ...)
If you want to set the name of the file in the request
(https://developer.mozilla.org/en-US/docs/Web/API/FormData/append#Syntax),
simply set my-file to be a vector: {:myfile [value filename]}
.
(http/get
"http://example.com"
{:basic-auth {:username "hello" :password "world"}})
(http/jsonp "http://example.com" {:callback-name "callback" :timeout 3000})
Where callback-name
is used to specify JSONP callback param name. Defaults to "callback".
timeout
is the length of time, in milliseconds.
This channel is prepared to wait for for a request to complete.
If the call is not competed within the set time span, it is assumed to have failed.
Copyright (C) 2012-2014 r0man
Distributed under the Eclipse Public License, the same as Clojure.