aleph.http.client-middleware
This middleware is adapted from clj-http, whose license is amenable to this sort of
copy/pastery
accept-encoding-value
(accept-encoding-value accept-encoding)
basic-auth-value
(basic-auth-value basic-auth)
client-error?
(client-error? {:keys [status]})
coerce-clojure-body
(coerce-clojure-body request {:keys [body], :as resp})
coerce-json-body
(coerce-json-body {:keys [coerce], :as req} {:keys [body status], :as resp} keyword? strict? & [charset])
coerce-response-body
multimethod
coerce-transit-body
(coerce-transit-body {:keys [transit-opts], :as request} {:keys [body], :as resp} type)
conflict?
(conflict? {:keys [status]})
content-type-value
(content-type-value type)
cookie->netty-cookie
(cookie->netty-cookie {:keys [domain http-only? secure? max-age name path value]})
cookie-expired?
(cookie-expired? {:keys [created max-age]})
CookieSpec
protocol
Implement rules for accepting and returning cookies
members
match-cookie-origin?
(match-cookie-origin? this origin cookie)
parse-cookie
(parse-cookie this cookie-str)
write-cookies
(write-cookies this cookies)
CookieStore
protocol
members
add-cookies!
(add-cookies! this cookies)
get-cookies
(get-cookies this)
default-cookie-spec
Default cookie spec implementation providing RFC6265 compliant behavior
with no validation for cookie names and values. In case you need strict validation
feel free to create impl. using {ClientCookieDecoder,ClientCookiEncoder}/STRICT
instead of LAX instances
detect-charset
(detect-charset content-type)
Given a charset header, detect the charset, returns UTF-8 if not found.
enrich-with-current-time
(enrich-with-current-time cookies)
follow-redirect
(follow-redirect client {:keys [uri url scheme server-name server-port trace-redirects], :or {trace-redirects []}, :as req} {:keys [body], :as rsp})
Attempts to follow the redirects from the "location" header, if no such
header exists (bad server!), returns the response without following the
request.
generate-query-string
(generate-query-string params & [content-type multi-param-style])
generate-query-string-with-encoding
(generate-query-string-with-encoding params encoding)
(generate-query-string-with-encoding params encoding multi-param-style)
handle-cookies
(handle-cookies {:keys [cookie-store cookie-spec], :or {cookie-spec default-cookie-spec}} {:keys [headers], :as rsp})
handle-redirects
(handle-redirects client {:keys [request-method max-redirects redirects-count trace-redirects url], :or {redirects-count 0, max-redirects 20}, :as req} {:keys [status], :as rsp})
Middleware that follows redirects in the response. A slingshot exception is
thrown if too many redirects occur. Options
:follow-redirects - default:true, whether to follow redirects
:max-redirects - default:20, maximum number of redirects to follow
:force-redirects - default:false, force redirecting methods to GET requests
In the response:
:redirects-count - number of redirects
:trace-redirects - vector of sites the request was redirected from
handle-response-debug
(handle-response-debug req rsp)
in-memory-cookie-store
(in-memory-cookie-store)
(in-memory-cookie-store seed-cookies)
In-memory storage to maintain cookies across requests
json-decode
dynamic
(json-decode & args)
Resolve and apply cheshire's json decoding dynamically.
json-decode-strict
dynamic
(json-decode-strict & args)
Resolve and apply cheshire's json decoding dynamically (with lazy parsing
disabled).
json-encode
dynamic
(json-encode & args)
Resolve and apply cheshire's json encoding dynamically.
match-cookie-domain?
(match-cookie-domain? origin domain)
match-cookie-path?
(match-cookie-path? origin-path cookie-path)
merge-cookies
(merge-cookies stored-cookies new-cookies)
missing?
(missing? {:keys [status]})
multi-param-suffix
(multi-param-suffix index multi-param-style)
netty-cookie->cookie
(netty-cookie->cookie cookie)
opt
(opt req param)
Check the request parameters for a keyword boolean option, with or without
the ?
Returns false if either of the values are false, or the value of
(or key1 key2) otherwise (truthy)
parse-content-type
(parse-content-type s)
Parse `s` as an RFC 2616 media type.
parse-transit
dynamic
(parse-transit in type & [opts])
Resolve and apply Transit's JSON/MessagePack decoding.
parse-url
(parse-url url)
Parse a URL string into a map of interesting parts.
parse-user-info
(parse-user-info user-info)
redirect?
(redirect? {:keys [status]})
reduce-to-unique-cookie-names
(reduce-to-unique-cookie-names cookies)
req->cookie-origin
(req->cookie-origin {:keys [url], :as req})
server-error?
(server-error? {:keys [status]})
success?
(success? {:keys [status]})
transit-encode
dynamic
(transit-encode out type & [opts])
Resolve and apply Transit's JSON/MessagePack encoding.
url-encode
(url-encode s)
(url-encode s encoding)
url-encode-illegal-characters
(url-encode-illegal-characters path-or-query)
Takes a raw url path or query and url-encodes any illegal characters.
Minimizes ambiguity by encoding space to %20.
wrap-accept
(wrap-accept {:keys [accept], :as req})
Middleware converting the :accept key in a request to application/<type>
wrap-accept-encoding
(wrap-accept-encoding {:keys [accept-encoding], :as req})
Middleware converting the :accept-encoding option to an acceptable
Accept-Encoding header in the request.
wrap-basic-auth
(wrap-basic-auth req)
Middleware converting the :basic-auth option into an Authorization header.
wrap-content-type
(wrap-content-type {:keys [content-type character-encoding], :as req})
Middleware converting a `:content-type <keyword>` option to the formal
application/<name> format and adding it as a header.
wrap-cookies
(wrap-cookies {:keys [cookie-store cookie-spec cookies], :or {cookie-spec default-cookie-spec, cookies (quote ())}, :as req})
Middleware that set 'Cookie' header based on the content of cookies passed
with the request or from cookies storage (when provided). Source for 'Cookie'
header content by priorities:
* 'Cookie' header (already set)
* non-empty `:cookies`
* non-nil `:cookie-store`
Each cookie should be represented as a map:
|:---|:---
| `name` | name of this cookie
| `value` | value of this cookie
| `domain` | specifies allowed hosts to receive the cookie (including subdomains)
| `path` | indicates a URL path that must exist in the requested URL in order to send the 'Cookie' header
| `http-only?` | when set to `true`, cookie can only be accessed by HTTP. Optional, defaults to `false`
| `secure?` | when set to `true`, cookie can only be transmitted over an encrypted connection. Optional, defaults to `false`
| `max-age` | set maximum age of this cookie in seconds. Options, defaults to `io.netty.handler.codec.http.cookie.Cookie/UNDEFINED_MAX_AGE`.
wrap-exceptions
(wrap-exceptions client)
Middleware that throws response as an ExceptionInfo if the response has
unsuccessful status code. :throw-exceptions set to false in the request
disables this middleware.
wrap-method
(wrap-method req)
Middleware converting the :method option into the :request-method option
wrap-nested-params
(wrap-nested-params {:keys [content-type flatten-nested-keys], :as req})
Middleware wrapping nested parameters for query strings.
wrap-oauth
(wrap-oauth req)
Middleware converting the :oauth-token option into an Authorization header.
wrap-query-params
(wrap-query-params {:keys [query-params content-type multi-param-style], :or {content-type :x-www-form-urlencoded, multi-param-style :default}, :as req})
Middleware converting the :query-params option to a querystring on
the request.
wrap-request
(wrap-request client)
Returns a batteries-included HTTP request function corresponding to the given
core client. See default-middleware for the middleware wrappers that are used
by default
wrap-request-debug
(wrap-request-debug req)
wrap-request-timing
(wrap-request-timing client)
Middleware that times the request, putting the total time (in milliseconds)
of the request into the :request-time key in the response.
wrap-url
(wrap-url req)
Middleware wrapping request URL parsing.
wrap-user-info
(wrap-user-info req)
Middleware converting the :user-info option into a :basic-auth option