|
4 | 4 | [clojure.string :as string] |
5 | 5 | [ring.util.codec :as codec] |
6 | 6 | [ring.util.mime-type :as mime]) |
7 | | - (:import [java.io ByteArrayInputStream ByteArrayOutputStream File] |
| 7 | + (:import [java.io ByteArrayInputStream ByteArrayOutputStream File |
| 8 | + InputStream] |
| 9 | + [java.net URI] |
8 | 10 | [java.nio.charset Charset] |
| 11 | + [java.util Map] |
9 | 12 | [org.apache.hc.core5.http ContentType HttpEntity] |
10 | 13 | [org.apache.hc.client5.http.entity.mime MultipartEntityBuilder])) |
11 | 14 |
|
|
75 | 78 | (defmethod body (class (byte-array 0)) [request bytes] |
76 | 79 | (-> request |
77 | 80 | (content-length (count bytes)) |
78 | | - (assoc :body (java.io.ByteArrayInputStream. bytes)))) |
| 81 | + (assoc :body (ByteArrayInputStream. bytes)))) |
79 | 82 |
|
80 | | -(defmethod body java.util.Map [request params] |
| 83 | +(defmethod body Map [request params] |
81 | 84 | (-> request |
82 | 85 | (content-type "application/x-www-form-urlencoded") |
83 | 86 | (body (encode-params params)))) |
|
99 | 102 | (defn- file? [f] |
100 | 103 | (instance? File f)) |
101 | 104 |
|
102 | | -(defn- add-multipart-part [builder k v] |
| 105 | +(defn- add-multipart-part [^MultipartEntityBuilder builder k v] |
103 | 106 | (let [param (if (map? v) v {:value v}) |
104 | 107 | value (if (string? (:value param)) |
105 | | - (.getBytes (:value param) default-charset) |
| 108 | + (.getBytes ^String (:value param) ^Charset default-charset) |
106 | 109 | (:value param)) |
107 | 110 | mimetype (ContentType/parse |
108 | 111 | (or (:content-type param) |
|
112 | 115 | "text/plain; charset=UTF-8" |
113 | 116 | "application/octet-stream"))) |
114 | 117 | filename (or (:filename param) |
115 | | - (when (file? value) (.getName ^File value)))] |
116 | | - (.addBinaryBody builder (name k) value mimetype filename))) |
| 118 | + (when (file? value) (.getName ^File value))) |
| 119 | + key-name (name k)] |
| 120 | + |
| 121 | + (cond |
| 122 | + (bytes? value) |
| 123 | + (.addBinaryBody builder ^String key-name ^bytes value |
| 124 | + ^ContentType mimetype ^String filename) |
| 125 | + (file? value) |
| 126 | + (.addBinaryBody builder ^String key-name ^File value |
| 127 | + ^ContentType mimetype ^String filename) |
| 128 | + (instance? InputStream value) |
| 129 | + (.addBinaryBody builder ^String key-name ^InputStream value |
| 130 | + ^ContentType mimetype ^String filename) |
| 131 | + :else builder))) |
117 | 132 |
|
118 | 133 | (defn- multipart-entity ^HttpEntity [params] |
119 | 134 | (let [builder (MultipartEntityBuilder/create)] |
120 | | - (.setCharset builder default-charset) |
| 135 | + (.setCharset builder ^Charset default-charset) |
121 | 136 | (doseq [[k v] params] |
122 | 137 | (add-multipart-part builder k v)) |
123 | 138 | (.build builder))) |
|
157 | 172 | ([method uri] |
158 | 173 | (request method uri nil)) |
159 | 174 | ([method uri params] |
160 | | - (let [uri (java.net.URI. uri) |
| 175 | + (let [uri (URI. uri) |
161 | 176 | scheme (keyword (or (.getScheme uri) "http")) |
162 | 177 | host (or (.getHost uri) "localhost") |
163 | 178 | port (when (not= (.getPort uri) -1) (.getPort uri)) |
|
0 commit comments