mirror of
https://github.com/buger/goreplay.git
synced 2024-04-21 12:32:02 +00:00
Fix Java middleware example (#358)
* Add encoding/decoding HTTP msgs to Java middleware example. * Add clojure middleware example.
This commit is contained in:
committed by
Leonid Bugaev
parent
ecd7e3a5e5
commit
082106dfd8
@@ -0,0 +1,53 @@
|
||||
(ns echo.core
|
||||
(:gen-class)
|
||||
(:require [clojure.string :as cs]
|
||||
[clojure.java.io :as io])
|
||||
(:import org.apache.commons.codec.binary.Hex
|
||||
java.io.BufferedReader
|
||||
java.io.IOException
|
||||
java.io.InputStreamReader))
|
||||
|
||||
|
||||
(defn transform-http-msg
|
||||
"Function that transforms/filters the incoming HTTP messages."
|
||||
[headers body]
|
||||
;; do actual transformations here
|
||||
[headers body])
|
||||
|
||||
|
||||
(defn decode-hex-string
|
||||
"Decode an Hex-encoded string."
|
||||
[s]
|
||||
(String. (Hex/decodeHex (.toCharArray s))))
|
||||
|
||||
|
||||
(defn encode-hex-string
|
||||
"Encode a string to a hex-encoded string."
|
||||
[^String s]
|
||||
(String. (Hex/encodeHex (.getBytes s))))
|
||||
|
||||
|
||||
(defn -main
|
||||
[& args]
|
||||
(let [br (BufferedReader. (InputStreamReader. System/in))]
|
||||
(try
|
||||
(loop [hex-line (.readLine br)]
|
||||
(let [decoded-req (decode-hex-string hex-line)
|
||||
|
||||
;; empty line separates headers from body
|
||||
http-request (partition-by empty? (cs/split-lines decoded-req))
|
||||
headers (first http-request)
|
||||
|
||||
;; HTTP messages can contain no body:
|
||||
body (when (= 3 (count http-request)) (last http-request))
|
||||
[new-headers new-body] (transform-http-msg headers body)]
|
||||
|
||||
(println (encode-hex-string (str (cs/join "\n" headers)
|
||||
(when body
|
||||
(str "\n\n"
|
||||
(cs/join "\n" body)))))))
|
||||
(when-let [line (.readLine br)]
|
||||
(recur line)))
|
||||
(catch IOException e nil))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user