Skip to content

Commit 86de942

Browse files
committed
Make request headers validation configurable, close AsyncHttpClient#1044
1 parent 227cb38 commit 86de942

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

client/src/main/java/org/asynchttpclient/BoundRequestBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@
1212
*/
1313
package org.asynchttpclient;
1414

15-
1615
public class BoundRequestBuilder extends RequestBuilderBase<BoundRequestBuilder> {
1716

1817
private final AsyncHttpClient client;
1918

19+
public BoundRequestBuilder(AsyncHttpClient client, String method, boolean isDisableUrlEncoding, boolean validateHeaders) {
20+
super(method, isDisableUrlEncoding, validateHeaders);
21+
this.client = client;
22+
}
23+
2024
public BoundRequestBuilder(AsyncHttpClient client, String method, boolean isDisableUrlEncoding) {
2125
super(method, isDisableUrlEncoding);
2226
this.client = client;

client/src/main/java/org/asynchttpclient/RequestBuilder.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818
import io.netty.handler.codec.http.HttpMethod;
1919

2020
/**
21-
* Builder for a {@link Request}. Warning: mutable and not thread-safe! Beware
22-
* that it holds a reference on the Request instance it builds, so modifying the
23-
* builder will modify the request even after it has been built.
21+
* Builder for a {@link Request}. Warning: mutable and not thread-safe! Beware that it holds a reference on the Request instance it builds, so modifying the builder will modify the
22+
* request even after it has been built.
2423
*/
2524
public class RequestBuilder extends RequestBuilderBase<RequestBuilder> {
2625

@@ -29,13 +28,17 @@ public RequestBuilder() {
2928
}
3029

3130
public RequestBuilder(String method) {
32-
super(method, false);
31+
this(method, false);
3332
}
3433

3534
public RequestBuilder(String method, boolean disableUrlEncoding) {
3635
super(method, disableUrlEncoding);
3736
}
3837

38+
public RequestBuilder(String method, boolean disableUrlEncoding, boolean validateHeaders) {
39+
super(method, disableUrlEncoding, validateHeaders);
40+
}
41+
3942
public RequestBuilder(Request prototype) {
4043
super(prototype);
4144
}

client/src/main/java/org/asynchttpclient/RequestBuilderBase.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
6666
protected Uri uri;
6767
protected InetAddress address;
6868
protected InetAddress localAddress;
69-
protected HttpHeaders headers = new DefaultHttpHeaders();
69+
protected HttpHeaders headers;
7070
protected ArrayList<Cookie> cookies;
7171
protected byte[] byteData;
7272
protected List<byte[]> compositeByteData;
@@ -89,8 +89,13 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
8989
protected NameResolver nameResolver = JdkNameResolver.INSTANCE;
9090

9191
protected RequestBuilderBase(String method, boolean disableUrlEncoding) {
92+
this(method, disableUrlEncoding, true);
93+
}
94+
95+
protected RequestBuilderBase(String method, boolean disableUrlEncoding, boolean validateHeaders) {
9296
this.method = method;
9397
this.uriEncoder = UriEncoder.uriEncoder(disableUrlEncoding);
98+
this.headers = new DefaultHttpHeaders(validateHeaders);
9499
}
95100

96101
protected RequestBuilderBase(Request prototype) {
@@ -177,12 +182,15 @@ public T addHeader(CharSequence name, String value) {
177182
}
178183

179184
public T setHeaders(HttpHeaders headers) {
180-
this.headers = headers == null ? new DefaultHttpHeaders() : headers;
185+
if (headers == null)
186+
this.headers.clear();
187+
else
188+
this.headers = headers;
181189
return asDerivedType();
182190
}
183191

184192
public T setHeaders(Map<String, Collection<String>> headers) {
185-
this.headers = new DefaultHttpHeaders();
193+
this.headers.clear();
186194
if (headers != null) {
187195
for (Map.Entry<String, Collection<String>> entry : headers.entrySet()) {
188196
String headerName = entry.getKey();
@@ -376,7 +384,7 @@ public T setProxyServer(ProxyServer proxyServer) {
376384
this.proxyServer = proxyServer;
377385
return asDerivedType();
378386
}
379-
387+
380388
public T setProxyServer(ProxyServer.Builder proxyServerBuilder) {
381389
this.proxyServer = proxyServerBuilder.build();
382390
return asDerivedType();
@@ -529,12 +537,12 @@ public Request build() {
529537
Uri finalUri = rb.computeUri();
530538
Charset finalCharset = rb.computeCharset();
531539
long finalContentLength = rb.computeRequestContentLength();
532-
540+
533541
// make copies of mutable internal collections
534542
List<Cookie> cookiesCopy = rb.cookies == null ? Collections.emptyList() : new ArrayList<>(rb.cookies);
535543
List<Param> formParamsCopy = rb.formParams == null ? Collections.emptyList() : new ArrayList<>(rb.formParams);
536544
List<Part> bodyPartsCopy = rb.bodyParts == null ? Collections.emptyList() : new ArrayList<>(rb.bodyParts);
537-
545+
538546
return new DefaultRequest(rb.method,//
539547
finalUri,//
540548
rb.address,//

0 commit comments

Comments
 (0)