Skip to content

Commit d9b690d

Browse files
committed
fixes issue with useRawUrl, queryString decode/encode and redirecting
1 parent 429aef8 commit d9b690d

File tree

6 files changed

+32
-11
lines changed

6 files changed

+32
-11
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<groupId>com.ning</groupId>
1010
<artifactId>async-http-client</artifactId>
1111
<name>Asynchronous Http Client</name>
12-
<version>1.6.4</version>
12+
<version>1.6.4_rawUrlFix</version>
1313
<packaging>jar</packaging>
1414
<description>
1515
Async Http Client library purpose is to allow Java applications to easily execute HTTP requests and

src/main/java/com/ning/http/client/AsyncHttpClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ public class BoundRequestBuilder extends RequestBuilderBase<BoundRequestBuilder>
215215
*/
216216
protected String baseURL;
217217

218-
private BoundRequestBuilder(String reqType) {
219-
super(BoundRequestBuilder.class, reqType);
218+
private BoundRequestBuilder(String reqType, boolean useRawUrl) {
219+
super(BoundRequestBuilder.class, reqType, useRawUrl);
220220
}
221221

222222
private BoundRequestBuilder(Request prototype) {
@@ -557,7 +557,7 @@ private final static AsyncHttpProvider loadDefaultProvider(String className, Asy
557557
}
558558

559559
protected BoundRequestBuilder requestBuilder(String reqType, String url) {
560-
return new BoundRequestBuilder(reqType).setUrl(url).setSignatureCalculator(signatureCalculator);
560+
return new BoundRequestBuilder(reqType, config.isUseRawUrl()).setUrl(url).setSignatureCalculator(signatureCalculator);
561561
}
562562

563563
protected BoundRequestBuilder requestBuilder(Request prototype) {

src/main/java/com/ning/http/client/Request.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,6 @@ public static interface EntityWriter {
190190
*/
191191
public String getBodyEncoding();
192192

193+
public boolean isUseRawUrl();
194+
193195
}

src/main/java/com/ning/http/client/RequestBuilder.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,17 @@
2525
* Builder for a {@link Request}.
2626
*/
2727
public class RequestBuilder extends RequestBuilderBase<RequestBuilder> {
28+
2829
public RequestBuilder() {
29-
super(RequestBuilder.class, "GET");
30+
super(RequestBuilder.class, "GET", false);
3031
}
3132

3233
public RequestBuilder(String method) {
33-
super(RequestBuilder.class, method);
34+
super(RequestBuilder.class, method, false);
35+
}
36+
37+
public RequestBuilder(String method, boolean useRawUrl) {
38+
super(RequestBuilder.class, method, useRawUrl);
3439
}
3540

3641
public RequestBuilder(Request prototype) {

src/main/java/com/ning/http/client/RequestBuilderBase.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@ private static final class RequestImpl implements Request {
5858
private PerRequestConfig perRequestConfig;
5959
private long rangeOffset = 0;
6060
public String charset;
61+
private boolean useRawUrl = false;
6162

62-
public RequestImpl() {
63+
public RequestImpl(boolean useRawUrl) {
64+
this.useRawUrl = useRawUrl;
6365
}
6466

6567
public RequestImpl(Request prototype) {
@@ -86,6 +88,7 @@ public RequestImpl(Request prototype) {
8688
this.perRequestConfig = prototype.getPerRequestConfig();
8789
this.rangeOffset = prototype.getRangeOffset();
8890
this.charset = prototype.getBodyEncoding();
91+
this.useRawUrl = prototype.isUseRawUrl();
8992
}
9093
}
9194

@@ -274,20 +277,27 @@ public String toString() {
274277

275278
return sb.toString();
276279
}
280+
281+
public boolean isUseRawUrl() {
282+
return useRawUrl;
283+
}
277284
}
278285

279286
private final Class<T> derived;
280287
protected final RequestImpl request;
288+
protected boolean useRawUrl = false;
281289

282-
protected RequestBuilderBase(Class<T> derived, String method) {
290+
protected RequestBuilderBase(Class<T> derived, String method, boolean rawUrls) {
283291
this.derived = derived;
284-
request = new RequestImpl();
292+
request = new RequestImpl(rawUrls);
285293
request.method = method;
294+
this.useRawUrl = rawUrls;
286295
}
287296

288297
protected RequestBuilderBase(Class<T> derived, Request prototype) {
289298
this.derived = derived;
290299
request = new RequestImpl(prototype);
300+
this.useRawUrl = prototype.isUseRawUrl();
291301
}
292302

293303
public T setUrl(String url) {
@@ -330,7 +340,11 @@ private String buildUrl(String url) {
330340
addQueryParameter(query, null);
331341
}else{
332342
try {
333-
addQueryParameter(URLDecoder.decode(query.substring(0, pos), "UTF-8") , URLDecoder.decode(query.substring(pos +1), "UTF-8"));
343+
if (this.useRawUrl) {
344+
addQueryParameter(query.substring(0, pos) , query.substring(pos +1));
345+
} else {
346+
addQueryParameter(URLDecoder.decode(query.substring(0, pos), "UTF-8") , URLDecoder.decode(query.substring(pos +1), "UTF-8"));
347+
}
334348
}
335349
catch ( UnsupportedEncodingException e ) {
336350
throw new RuntimeException(e);

src/main/java/com/ning/http/client/SimpleAsyncHttpClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ public final static class Builder implements DerivedBuilder {
403403
private SimpleAHCTransferListener listener = null;
404404

405405
public Builder() {
406-
requestBuilder = new RequestBuilder("GET");
406+
requestBuilder = new RequestBuilder("GET", false);
407407
}
408408

409409
private Builder(SimpleAsyncHttpClient client) {

0 commit comments

Comments
 (0)