Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cch1/http.async.client

Async Http Client - Clojure
https://github.com/cch1/http.async.client

Last synced: 3 days ago
JSON representation

Async Http Client - Clojure

Awesome Lists containing this project

README

        

#+TITLE: http.async.client - Asynchronous HTTP Client - Clojure
#+SETUPFILE: org/setup.org

*http.async.client* is the Asynchronous HTTP Client for Clojure. It is promise-based and uses the
[[http://github.com/AsyncHttpClient/async-http-client][Asynchronous Http Client for Java]] for the heavy lifting.

* Versioning
This library uses [[http://www.semver.org][semantic versioning]]. An overview of changes by version is available
in the [[http://cch1.github.io/http.async.client/changelog][changelog]].

* Distribution
All released artifacts are deployed to [[https://clojars.org/http.async.client][Clojars]].

[[http://clojars.org/http.async.client/latest-version.svg]]

* Build status
[[https://travis-ci.org/cch1/http.async.client][TravisCI]] is used to track the build status of intermediate
commits on the following branches:
| master | [[https://secure.travis-ci.org/cch1/http.async.client.png?branch=master]] |
| development | [[https://secure.travis-ci.org/cch1/http.async.client.png?branch=development]] |

* Examples
Declare dependency (using leiningen, in this example):
#+BEGIN_SRC clojure -n
(defproject your-project "1.0.0-SNAPSHOT"
:description "Your project description"
:dependencies [[org.clojure/clojure "1.10.0"]
[http.async.client "1.4.0"]])
#+END_SRC

** Asynchronous GET request

#+BEGIN_SRC clojure -n
(ns async-get
(:require [http.async.client :as http]))

(with-open [client (http/create-client)]
(let [response (http/GET client "https://github.com/cch1/http.async.client/")]
(-> response
http/await
http/string)))
#+END_SRC

** WebSocket client

#+BEGIN_SRC clojure -n
(ns ws-client
(:require [http.async.client :as http]))

(def url "ws://remote-websocket-url:1337")

(defn on-open [ws]
(println "Connected to WebSocket."))

(defn on-close [ws code reason]
(println "Connection to WebSocket closed.\n"
(format "[%s] %s" code reason)))

(defn on-error [ws e]
(println "ERROR:" e))

(defn handle-message [ws msg]
(prn "got message:" msg))

(defn -main []
(println "Connecting...")
(with-open [client (http/create-client)]
(let [ws (http/websocket client
url
:open on-open
:close on-close
:error on-error
:text handle-message)]
; this loop-recur is here as a placeholder to keep the process
; from ending, so that the message-handling function will continue to
; print messages to STDOUT until Ctrl-C is pressed
(loop [] (recur)))))

#+END_SRC

* More info

It runs with Clojure 1.5.1, 1.6.0, 1.7.0, 1.8.0, 1.9.0 and 1.10.0. Development is currently against Clojure 1.10.3.

For complete documentation refer to the [[http://cch1.github.io/http.async.client/][project documentation index]].

*http.async.client* is distributed under [[http://www.apache.org/licenses/LICENSE-2.0.html][Apache License, Version 2.0]].

If you would like to report an problem or submit a request, [[http://github.com/cch1/http.async.client/issues/][create an issue]].

Finally, much thanks is owed to those [[https://github.com/cch1/http.async.client/graphs/contributors][contributors]] who have made this project so successful.