@@ -57,8 +57,8 @@ by a server."
5757 cookie-map)))
5858
5959(defn request
60- " Perform an HTTP request on url u."
61- [u & [method headers cookies]]
60+ " Perform an HTTP request on url u. "
61+ [u & [method headers cookies body ]]
6262 (let [connection (.openConnection (url u))
6363 method (.toUpperCase (as-str (or method
6464 " GET" )))]
@@ -73,13 +73,25 @@ by a server."
7373 (.setRequestProperty connection
7474 " Cookie"
7575 (create-cookie-string cookies)))
76- (.connect connection)
76+ (if body
77+ (do
78+ (.setDoOutput connection true )
79+ (.setRequestProperty connection
80+ " Content-Type"
81+ " application/x-www-form-urlencoded" )
82+ (.connect connection)
83+ (.write (.getOutputStream connection)
84+ (if (isa? body String)
85+ body
86+ (str-join " &" (map #(str-join " =" %) body)))))
87+ (.connect connection))
88+
7789 (let [headers (parse-headers connection)]
7890 {:body-seq (body-seq connection)
7991 :code (.getResponseCode connection)
8092 :msg (.getResponseMessage connection)
8193 :headers (dissoc headers " Set-Cookie" )
8294 ; ; This correctly implements case-insensitive lookup.
8395 :get-header #(.getHeaderField connection (as-str %))
84- :cookies (parse-cookies (get headers " Set-Cookie" nil ))
96+ :cookies (parse-cookies (headers " Set-Cookie" ))
8597 :url (str (.getURL connection))})))
0 commit comments