Skip to content

Instantly share code, notes, and snippets.

@p14n
Created March 1, 2025 17:49
Show Gist options
  • Save p14n/2f04ca9db3ac764fa61faf23aecf5bd4 to your computer and use it in GitHub Desktop.
Save p14n/2f04ca9db3ac764fa61faf23aecf5bd4 to your computer and use it in GitHub Desktop.
Ring handler to record req/responses
(defn capture
[handler]
(let [a (atom [])
_ (.addShutdownHook (Runtime/getRuntime)
(Thread. #(->> a
(deref)
(pr-str)
(spit (str "./test-requests-" (System/currentTimeMillis) ".edn")))))]
(fn
([request]
(let [buffer (java.io.ByteArrayOutputStream.)
_ (clojure.java.io/copy (:body request) buffer)
bytes (.toByteArray buffer)
req-text (String. bytes "utf-8")
response (handler (assoc request :body (java.io.ByteArrayInputStream. bytes)) )]
(let [{:keys [request-method uri]} request
{:keys [status body]} response]
(swap! a conj [uri request-method req-text status body])
response)))
([request respond raise]
(handler request (fn [response] (respond response)) raise)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment