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 SimpleRequestBuilderethods/SimpleRequestBuilder.html#SimpleRequestBuilder">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 SimpleRequestBuilderethods/SimpleRequestBuilder.html#SimpleRequestBuilder">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 protected void digest(final HttpRequest request) {
223 super.digest(request);
224 }
225
226 @Override
227 public SimpleRequestBuilder setVersion(final ProtocolVersion version) {
228 super.setVersion(version);
229 return this;
230 }
231
232 @Override
233 public SimpleRequestBuilder setUri(final URI uri) {
234 super.setUri(uri);
235 return this;
236 }
237
238 @Override
239 public SimpleRequestBuilder setUri(final String uri) {
240 super.setUri(uri);
241 return this;
242 }
243
244 @Override
245 public SimpleRequestBuilder setScheme(final String scheme) {
246 super.setScheme(scheme);
247 return this;
248 }
249
250 @Override
251 public SimpleRequestBuilder setAuthority(final URIAuthority authority) {
252 super.setAuthority(authority);
253 return this;
254 }
255
256 @Override
257 public SimpleRequestBuilder setHttpHost(final HttpHost httpHost) {
258 super.setHttpHost(httpHost);
259 return this;
260 }
261
262 @Override
263 public SimpleRequestBuilder setPath(final String path) {
264 super.setPath(path);
265 return this;
266 }
267
268 @Override
269 public SimpleRequestBuilder setHeaders(final Header... headers) {
270 super.setHeaders(headers);
271 return this;
272 }
273
274 @Override
275 public SimpleRequestBuilder addHeader(final Header header) {
276 super.addHeader(header);
277 return this;
278 }
279
280 @Override
281 public SimpleRequestBuilder addHeader(final String name, final String value) {
282 super.addHeader(name, value);
283 return this;
284 }
285
286 @Override
287 public SimpleRequestBuilder removeHeader(final Header header) {
288 super.removeHeader(header);
289 return this;
290 }
291
292 @Override
293 public SimpleRequestBuilder removeHeaders(final String name) {
294 super.removeHeaders(name);
295 return this;
296 }
297
298 @Override
299 public SimpleRequestBuilder setHeader(final Header header) {
300 super.setHeader(header);
301 return this;
302 }
303
304 @Override
305 public SimpleRequestBuilder setHeader(final String name, final String value) {
306 super.setHeader(name, value);
307 return this;
308 }
309
310 @Override
311 public SimpleRequestBuilder setCharset(final Charset charset) {
312 super.setCharset(charset);
313 return this;
314 }
315
316 @Override
317 public SimpleRequestBuilder addParameter(final NameValuePair nvp) {
318 super.addParameter(nvp);
319 return this;
320 }
321
322 @Override
323 public SimpleRequestBuilder addParameter(final String name, final String value) {
324 super.addParameter(name, value);
325 return this;
326 }
327
328 @Override
329 public SimpleRequestBuilder addParameters(final NameValuePair... nvps) {
330 super.addParameters(nvps);
331 return this;
332 }
333
334 @Override
335 public SimpleRequestBuilder setAbsoluteRequestUri(final boolean absoluteRequestUri) {
336 super.setAbsoluteRequestUri(absoluteRequestUri);
337 return this;
338 }
339
340 public SimpleBody getBody() {
341 return body;
342 }
343
344 public SimpleRequestBuilder setBody(final SimpleBody body) {
345 this.body = body;
346 return this;
347 }
348
349 public SimpleRequestBuilder setBody(final String content, final ContentType contentType) {
350 this.body = SimpleBody.create(content, contentType);
351 return this;
352 }
353
354 public SimpleRequestBuilder setBody(final byte[] content, final ContentType contentType) {
355 this.body = SimpleBody.create(content, contentType);
356 return this;
357 }
358
359 public RequestConfig getRequestConfig() {
360 return requestConfig;
361 }
362
363 public SimpleRequestBuilder setRequestConfig(final RequestConfig requestConfig) {
364 this.requestConfig = requestConfig;
365 return this;
366 }
367
368 public SimpleHttpRequest build() {
369 String path = getPath();
370 SimpleBody bodyCopy = this.body;
371 final String method = getMethod();
372 final List<NameValuePair> parameters = getParameters();
373 if (parameters != null && !parameters.isEmpty()) {
374 final Charset charsetCopy = getCharset();
375 if (bodyCopy == null && (Method.POST.isSame(method) || Method.PUT.isSame(method))) {
376 final String content = WWWFormCodec.format(
377 parameters,
378 charsetCopy != null ? charsetCopy : ContentType.APPLICATION_FORM_URLENCODED.getCharset());
379 bodyCopy = SimpleBody.create(content, ContentType.APPLICATION_FORM_URLENCODED);
380 } else {
381 try {
382 final URI uri = new URIBuilder(path)
383 .setCharset(charsetCopy)
384 .addParameters(parameters)
385 .build();
386 path = uri.toASCIIString();
387 } catch (final URISyntaxException ex) {
388
389 }
390 }
391 }
392
393 if (bodyCopy != null && Method.TRACE.isSame(method)) {
394 throw new IllegalStateException(Method.TRACE + " requests may not include an entity");
395 }
396
397 final SimpleHttpRequestnc/methods/SimpleHttpRequest.html#SimpleHttpRequest">SimpleHttpRequest result = new SimpleHttpRequest(method, getScheme(), getAuthority(), path);
398 result.setVersion(getVersion());
399 result.setHeaders(getHeaders());
400 result.setBody(bodyCopy);
401 result.setAbsoluteRequestUri(isAbsoluteRequestUri());
402 result.setConfig(requestConfig);
403 return result;
404 }
405
406 @Override
407 public String toString() {
408 final StringBuilder builder = new StringBuilder();
409 builder.append("ClassicRequestBuilder [method=");
410 builder.append(getMethod());
411 builder.append(", scheme=");
412 builder.append(getScheme());
413 builder.append(", authority=");
414 builder.append(getAuthority());
415 builder.append(", path=");
416 builder.append(getPath());
417 builder.append(", parameters=");
418 builder.append(getParameters());
419 builder.append(", headerGroup=");
420 builder.append(Arrays.toString(getHeaders()));
421 builder.append(", body=");
422 builder.append(body);
423 builder.append("]");
424 return builder.toString();
425 }
426
427 }