1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.async.methods;
29
30 import java.net.URI;
31 import java.net.URISyntaxException;
32 import java.nio.charset.Charset;
33 import java.util.Arrays;
34 import java.util.List;
35
36 import org.apache.hc.client5.http.config.RequestConfig;
37 import org.apache.hc.core5.http.ContentType;
38 import org.apache.hc.core5.http.Header;
39 import org.apache.hc.core5.http.HttpHost;
40 import org.apache.hc.core5.http.HttpRequest;
41 import org.apache.hc.core5.http.Method;
42 import org.apache.hc.core5.http.NameValuePair;
43 import org.apache.hc.core5.http.ProtocolVersion;
44 import org.apache.hc.core5.http.support.AbstractRequestBuilder;
45 import org.apache.hc.core5.net.URIAuthority;
46 import org.apache.hc.core5.net.URIBuilder;
47 import org.apache.hc.core5.net.WWWFormCodec;
48 import org.apache.hc.core5.util.Args;
49
50
51
52
53
54
55
56
57
58
59
60
61
62 public class SimpleRequestBuilder extends AbstractRequestBuilder<SimpleHttpRequest> {
63
64 private SimpleBody body;
65 private RequestConfig requestConfig;
66
67 SimpleRequestBuilder(final String method) {
68 super(method);
69 }
70
71 SimpleRequestBuilder(final Method method) {
72 super(method);
73 }
74
75 SimpleRequestBuilder(final String method, final URI uri) {
76 super(method, uri);
77 }
78
79 SimpleRequestBuilder(final Method method, final URI uri) {
80 super(method, uri);
81 }
82
83 SimpleRequestBuilder(final Method method, final String uri) {
84 super(method, uri);
85 }
86
87 SimpleRequestBuilder(final String method, final String uri) {
88 super(method, uri);
89 }
90
91 public static SimpleRequestBuilder create(final String method) {
92 Args.notBlank(method, "HTTP method");
93 return new SimpleRequestBuilder(method);
94 }
95
96 public static SimpleRequestBuilder create(final Method method) {
97 Args.notNull(method, "HTTP method");
98 return new SimpleRequestBuilder(method);
99 }
100
101 public static SimpleRequestBuilder get() {
102 return new SimpleRequestBuilder(Method.GET);
103 }
104
105 public static SimpleRequestBuilder get(final URI uri) {
106 return new SimpleRequestBuilder(Method.GET, uri);
107 }
108
109 public static SimpleRequestBuilder get(final String uri) {
110 return new SimpleRequestBuilder(Method.GET, uri);
111 }
112
113 public static SimpleRequestBuilder head() {
114 return new SimpleRequestBuilder(Method.HEAD);
115 }
116
117 public static SimpleRequestBuilder head(final URI uri) {
118 return new SimpleRequestBuilder(Method.HEAD, uri);
119 }
120
121 public static SimpleRequestBuilder head(final String uri) {
122 return new SimpleRequestBuilder(Method.HEAD, uri);
123 }
124
125 public static SimpleRequestBuilder patch() {
126 return new SimpleRequestBuilder(Method.PATCH);
127 }
128
129 public static SimpleRequestBuilder patch(final URI uri) {
130 return new SimpleRequestBuilder(Method.PATCH, uri);
131 }
132
133 public static SimpleRequestBuilder patch(final String uri) {
134 return new SimpleRequestBuilder(Method.PATCH, uri);
135 }
136
137 public static SimpleRequestBuilder post() {
138 return new SimpleRequestBuilder(Method.POST);
139 }
140
141 public static SimpleRequestBuilder post(final URI uri) {
142 return new SimpleRequestBuilder(Method.POST, uri);
143 }
144
145 public static SimpleRequestBuilder post(final String uri) {
146 return new SimpleRequestBuilder(Method.POST, uri);
147 }
148
149 public static SimpleRequestBuilder put() {
150 return new SimpleRequestBuilder(Method.PUT);
151 }
152
153 public static SimpleRequestBuilder put(final URI uri) {
154 return new SimpleRequestBuilder(Method.PUT, uri);
155 }
156
157 public static SimpleRequestBuilder put(final String uri) {
158 return new SimpleRequestBuilder(Method.PUT, uri);
159 }
160
161 public static SimpleRequestBuilder delete() {
162 return new SimpleRequestBuilder(Method.DELETE);
163 }
164
165 public static SimpleRequestBuilder delete(final URI uri) {
166 return new SimpleRequestBuilder(Method.DELETE, uri);
167 }
168
169 public static SimpleRequestBuilder delete(final String uri) {
170 return new SimpleRequestBuilder(Method.DELETE, uri);
171 }
172
173 public static SimpleRequestBuilder trace() {
174 return new SimpleRequestBuilder(Method.TRACE);
175 }
176
177 public static SimpleRequestBuilder trace(final URI uri) {
178 return new SimpleRequestBuilder(Method.TRACE, uri);
179 }
180
181 public static SimpleRequestBuilder trace(final String uri) {
182 return new SimpleRequestBuilder(Method.TRACE, uri);
183 }
184
185 public static SimpleRequestBuilder options() {
186 return new SimpleRequestBuilder(Method.OPTIONS);
187 }
188
189 public static SimpleRequestBuilder options(final URI uri) {
190 return new SimpleRequestBuilder(Method.OPTIONS, uri);
191 }
192
193 public static SimpleRequestBuilder options(final String uri) {
194 return new SimpleRequestBuilder(Method.OPTIONS, uri);
195 }
196
197
198
199
200 public static SimpleRequestBuilder copy(final SimpleHttpRequest request) {
201 Args.notNull(request, "HTTP request");
202 final SimpleRequestBuilder builder = new SimpleRequestBuilder(request.getMethod());
203 builder.digest(request);
204 return builder;
205 }
206
207
208
209
210 public static SimpleRequestBuilder copy(final HttpRequest request) {
211 Args.notNull(request, "HTTP request");
212 final SimpleRequestBuilder builder = new SimpleRequestBuilder(request.getMethod());
213 builder.digest(request);
214 return builder;
215 }
216
217 protected void digest(final SimpleHttpRequest request) {
218 super.digest(request);
219 setBody(request.getBody());
220 }
221
222 @Override
223 protected void digest(final HttpRequest request) {
224 super.digest(request);
225 }
226
227 @Override
228 public SimpleRequestBuilder setVersion(final ProtocolVersion version) {
229 super.setVersion(version);
230 return this;
231 }
232
233 @Override
234 public SimpleRequestBuilder setUri(final URI uri) {
235 super.setUri(uri);
236 return this;
237 }
238
239 @Override
240 public SimpleRequestBuilder setUri(final String uri) {
241 super.setUri(uri);
242 return this;
243 }
244
245 @Override
246 public SimpleRequestBuilder setScheme(final String scheme) {
247 super.setScheme(scheme);
248 return this;
249 }
250
251 @Override
252 public SimpleRequestBuilder setAuthority(final URIAuthority authority) {
253 super.setAuthority(authority);
254 return this;
255 }
256
257 @Override
258 public SimpleRequestBuilder setHttpHost(final HttpHost httpHost) {
259 super.setHttpHost(httpHost);
260 return this;
261 }
262
263 @Override
264 public SimpleRequestBuilder setPath(final String path) {
265 super.setPath(path);
266 return this;
267 }
268
269 @Override
270 public SimpleRequestBuilder setHeaders(final Header... headers) {
271 super.setHeaders(headers);
272 return this;
273 }
274
275 @Override
276 public SimpleRequestBuilder addHeader(final Header header) {
277 super.addHeader(header);
278 return this;
279 }
280
281 @Override
282 public SimpleRequestBuilder addHeader(final String name, final String value) {
283 super.addHeader(name, value);
284 return this;
285 }
286
287 @Override
288 public SimpleRequestBuilder removeHeader(final Header header) {
289 super.removeHeader(header);
290 return this;
291 }
292
293 @Override
294 public SimpleRequestBuilder removeHeaders(final String name) {
295 super.removeHeaders(name);
296 return this;
297 }
298
299 @Override
300 public SimpleRequestBuilder setHeader(final Header header) {
301 super.setHeader(header);
302 return this;
303 }
304
305 @Override
306 public SimpleRequestBuilder setHeader(final String name, final String value) {
307 super.setHeader(name, value);
308 return this;
309 }
310
311 @Override
312 public SimpleRequestBuilder setCharset(final Charset charset) {
313 super.setCharset(charset);
314 return this;
315 }
316
317 @Override
318 public SimpleRequestBuilder addParameter(final NameValuePair nvp) {
319 super.addParameter(nvp);
320 return this;
321 }
322
323 @Override
324 public SimpleRequestBuilder addParameter(final String name, final String value) {
325 super.addParameter(name, value);
326 return this;
327 }
328
329 @Override
330 public SimpleRequestBuilder addParameters(final NameValuePair... nvps) {
331 super.addParameters(nvps);
332 return this;
333 }
334
335 @Override
336 public SimpleRequestBuilder setAbsoluteRequestUri(final boolean absoluteRequestUri) {
337 super.setAbsoluteRequestUri(absoluteRequestUri);
338 return this;
339 }
340
341 public SimpleBody getBody() {
342 return body;
343 }
344
345 public SimpleRequestBuilder setBody(final SimpleBody body) {
346 this.body = body;
347 return this;
348 }
349
350 public SimpleRequestBuilder setBody(final String content, final ContentType contentType) {
351 this.body = SimpleBody.create(content, contentType);
352 return this;
353 }
354
355 public SimpleRequestBuilder setBody(final byte[] content, final ContentType contentType) {
356 this.body = SimpleBody.create(content, contentType);
357 return this;
358 }
359
360 public RequestConfig getRequestConfig() {
361 return requestConfig;
362 }
363
364 public SimpleRequestBuilder setRequestConfig(final RequestConfig requestConfig) {
365 this.requestConfig = requestConfig;
366 return this;
367 }
368
369 @Override
370 public SimpleHttpRequest build() {
371 String path = getPath();
372 SimpleBody bodyCopy = this.body;
373 final String method = getMethod();
374 final List<NameValuePair> parameters = getParameters();
375 if (parameters != null && !parameters.isEmpty()) {
376 final Charset charsetCopy = getCharset();
377 if (bodyCopy == null && (Method.POST.isSame(method) || Method.PUT.isSame(method))) {
378 final String content = WWWFormCodec.format(
379 parameters,
380 charsetCopy != null ? charsetCopy : ContentType.APPLICATION_FORM_URLENCODED.getCharset());
381 bodyCopy = SimpleBody.create(content, ContentType.APPLICATION_FORM_URLENCODED);
382 } else {
383 try {
384 final URI uri = new URIBuilder(path)
385 .setCharset(charsetCopy)
386 .addParameters(parameters)
387 .build();
388 path = uri.toASCIIString();
389 } catch (final URISyntaxException ex) {
390
391 }
392 }
393 }
394
395 if (bodyCopy != null && Method.TRACE.isSame(method)) {
396 throw new IllegalStateException(Method.TRACE + " requests may not include an entity");
397 }
398
399 final SimpleHttpRequest result = new SimpleHttpRequest(method, getScheme(), getAuthority(), path);
400 result.setVersion(getVersion());
401 result.setHeaders(getHeaders());
402 result.setBody(bodyCopy);
403 result.setAbsoluteRequestUri(isAbsoluteRequestUri());
404 result.setConfig(requestConfig);
405 return result;
406 }
407
408 @Override
409 public String toString() {
410 final StringBuilder builder = new StringBuilder();
411 builder.append("ClassicRequestBuilder [method=");
412 builder.append(getMethod());
413 builder.append(", scheme=");
414 builder.append(getScheme());
415 builder.append(", authority=");
416 builder.append(getAuthority());
417 builder.append(", path=");
418 builder.append(getPath());
419 builder.append(", parameters=");
420 builder.append(getParameters());
421 builder.append(", headerGroup=");
422 builder.append(Arrays.toString(getHeaders()));
423 builder.append(", body=");
424 builder.append(body);
425 builder.append("]");
426 return builder.toString();
427 }
428
429 }