Skip to content
This repository was archived by the owner on Jan 23, 2018. It is now read-only.

Commit f565569

Browse files
committed
Allow request bodies to be set.
1 parent 5cad8b2 commit f565569

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/clojure/http/client.clj

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)