You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2012/06/25 17:28:42 UTC
svn commit: r1353593 - in /httpcomponents/httpclient/trunk/httpclient/src:
main/java/org/apache/http/client/utils/
test/java/org/apache/http/client/utils/
Author: olegk
Date: Mon Jun 25 15:28:41 2012
New Revision: 1353593
URL: http://svn.apache.org/viewvc?rev=1353593&view=rev
Log:
HTTPCLIENT-1195: blanks in the query part of request URIs to be encoded as '+'
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java?rev=1353593&r1=1353592&r2=1353593&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java Mon Jun 25 15:28:41 2012
@@ -310,7 +310,10 @@ public class URLEncodedUtils {
private static final int RADIX = 16;
private static String urlencode(
- final String content, final Charset charset, final BitSet safechars) {
+ final String content,
+ final Charset charset,
+ final BitSet safechars,
+ final boolean blankAsPlus) {
if (content == null) {
return null;
}
@@ -321,18 +324,24 @@ public class URLEncodedUtils {
if (safechars.get(b)) {
buf.append((char) b);
} else {
- buf.append("%");
- char hex1 = Character.toUpperCase(Character.forDigit((b >> 4) & 0xF, RADIX));
- char hex2 = Character.toUpperCase(Character.forDigit(b & 0xF, RADIX));
- buf.append(hex1);
- buf.append(hex2);
+ if (b == ' ' && blankAsPlus) {
+ buf.append('+');
+ } else {
+ buf.append("%");
+ char hex1 = Character.toUpperCase(Character.forDigit((b >> 4) & 0xF, RADIX));
+ char hex2 = Character.toUpperCase(Character.forDigit(b & 0xF, RADIX));
+ buf.append(hex1);
+ buf.append(hex2);
+ }
}
}
return buf.toString();
}
private static String urldecode(
- final String content, final Charset charset) {
+ final String content,
+ final Charset charset,
+ final boolean plusAsBlank) {
if (content == null) {
return null;
}
@@ -352,6 +361,8 @@ public class URLEncodedUtils {
bb.put((byte) uc);
bb.put((byte) lc);
}
+ } else if (c == '+' && plusAsBlank) {
+ bb.put((byte) ' ');
} else {
bb.put((byte) c);
}
@@ -364,50 +375,51 @@ public class URLEncodedUtils {
if (content == null) {
return null;
}
- return urldecode(content, charset != null ? Charset.forName(charset) : Consts.UTF_8);
+ return urldecode(content, charset != null ? Charset.forName(charset) : Consts.UTF_8, true);
}
private static String decode (final String content, final Charset charset) {
if (content == null) {
return null;
}
- return urldecode(content, charset != null ? charset : Consts.UTF_8);
+ return urldecode(content, charset != null ? charset : Consts.UTF_8, true);
}
private static String encode(final String content, final String charset) {
if (content == null) {
return null;
}
- return urlencode(content, charset != null ? Charset.forName(charset) : Consts.UTF_8, UNRESERVED);
+ return urlencode(content, charset != null ? Charset.forName(charset) :
+ Consts.UTF_8, UNRESERVED, true);
}
private static String encode(final String content, final Charset charset) {
if (content == null) {
return null;
}
- return urlencode(content, charset != null ? charset : Consts.UTF_8, UNRESERVED);
+ return urlencode(content, charset != null ? charset : Consts.UTF_8, UNRESERVED, true);
}
/**
* Encode a String using the {@link #SAFE} set of characters.
- *
+ *
* @param content the string to encode
* @param charset the charset to use
* @return the encoded string
*/
static String enc(final String content, final Charset charset) {
- return urlencode(content, charset, SAFE);
+ return urlencode(content, charset, SAFE, false);
}
/**
* Encode a String using the {@link #PATHSAFE} set of characters.
- *
+ *
* @param content the string to encode
* @param charset the charset to use
* @return the encoded string
*/
static String encPath(final String content, final Charset charset) {
- return urlencode(content, charset, PATHSAFE);
+ return urlencode(content, charset, PATHSAFE, false);
}
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java?rev=1353593&r1=1353592&r2=1353593&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java Mon Jun 25 15:28:41 2012
@@ -120,7 +120,7 @@ public class TestURIBuilder {
URIBuilder uribuilder = new URIBuilder(uri).setParameter("param", "some other stuff")
.setParameter("blah", "blah");
URI result = uribuilder.build();
- Assert.assertEquals(new URI("http://localhost:80/?param=some%20other%20stuff&blah=blah"), result);
+ Assert.assertEquals(new URI("http://localhost:80/?param=some+other+stuff&blah=blah"), result);
}
@Test
@@ -129,7 +129,7 @@ public class TestURIBuilder {
URIBuilder uribuilder = new URIBuilder(uri).addParameter("param", "1 + 1 = 2")
.addParameter("param", "blah&blah");
URI result = uribuilder.build();
- Assert.assertEquals(new URI("http://localhost:80/?param=stuff¶m=1%20%2B%201%20%3D%202&" +
+ Assert.assertEquals(new URI("http://localhost:80/?param=stuff¶m=1+%2B+1+%3D+2&" +
"param=blah%26blah"), result);
}
@@ -140,13 +140,13 @@ public class TestURIBuilder {
.addParameter("blah", "blah");
URI result = uribuilder.build();
Assert.assertEquals(new URI("http://localhost:80/?param=stuff&blah&blah&" +
- "param=some%20other%20stuff&blah=blah"), result);
+ "param=some+other+stuff&blah=blah"), result);
}
@Test
public void testQueryEncoding() throws Exception {
URI uri1 = new URI("https://somehost.com/stuff?client_id=1234567890" +
- "&redirect_uri=https%3A%2F%2Fsomehost.com%2Fblah%20blah%2F");
+ "&redirect_uri=https%3A%2F%2Fsomehost.com%2Fblah+blah%2F");
URI uri2 = new URIBuilder("https://somehost.com/stuff")
.addParameter("client_id","1234567890")
.addParameter("redirect_uri","https://somehost.com/blah blah/").build();
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java?rev=1353593&r1=1353592&r2=1353593&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java Mon Jun 25 15:28:41 2012
@@ -192,7 +192,7 @@ public class TestURLEncodedUtils {
String s = URLEncodedUtils.format(parameters, HTTP.DEF_CONTENT_CHARSET);
- Assert.assertEquals("english=hi%20there&swiss=Gr%FCezi_z%E4m%E4", s);
+ Assert.assertEquals("english=hi+there&swiss=Gr%FCezi_z%E4m%E4", s);
StringEntity entity = new StringEntity(s, ContentType.create(
URLEncodedUtils.CONTENT_TYPE, HTTP.DEF_CONTENT_CHARSET));
@@ -235,7 +235,7 @@ public class TestURLEncodedUtils {
params.clear();
params.add(new BasicNameValuePair("Name4", "Value 4&"));
- Assert.assertEquals("Name4=Value%204%26", URLEncodedUtils.format(params, Consts.ASCII));
+ Assert.assertEquals("Name4=Value+4%26", URLEncodedUtils.format(params, Consts.ASCII));
params.clear();
params.add(new BasicNameValuePair("Name4", "Value+4&"));
@@ -243,7 +243,7 @@ public class TestURLEncodedUtils {
params.clear();
params.add(new BasicNameValuePair("Name4", "Value 4& =4"));
- Assert.assertEquals("Name4=Value%204%26%20%3D4", URLEncodedUtils.format(params, Consts.ASCII));
+ Assert.assertEquals("Name4=Value+4%26+%3D4", URLEncodedUtils.format(params, Consts.ASCII));
params.clear();
params.add(new BasicNameValuePair("Name5", "aaa"));
@@ -258,7 +258,7 @@ public class TestURLEncodedUtils {
params.clear();
params.add(new BasicNameValuePair("Name8", "xx, yy ,zz"));
- Assert.assertEquals("Name8=xx%2C%20%20yy%20%20%2Czz", URLEncodedUtils.format(params, Consts.ASCII));
+ Assert.assertEquals("Name8=xx%2C++yy++%2Czz", URLEncodedUtils.format(params, Consts.ASCII));
}
@Test
@@ -280,7 +280,7 @@ public class TestURLEncodedUtils {
params.clear();
params.add(new BasicNameValuePair("Name4", "Value 4&"));
- Assert.assertEquals("Name4=Value%204%26", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name4=Value+4%26", URLEncodedUtils.format(params, "US-ASCII"));
params.clear();
params.add(new BasicNameValuePair("Name4", "Value+4&"));
@@ -288,7 +288,7 @@ public class TestURLEncodedUtils {
params.clear();
params.add(new BasicNameValuePair("Name4", "Value 4& =4"));
- Assert.assertEquals("Name4=Value%204%26%20%3D4", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name4=Value+4%26+%3D4", URLEncodedUtils.format(params, "US-ASCII"));
params.clear();
params.add(new BasicNameValuePair("Name5", "aaa"));
@@ -303,7 +303,7 @@ public class TestURLEncodedUtils {
params.clear();
params.add(new BasicNameValuePair("Name8", "xx, yy ,zz"));
- Assert.assertEquals("Name8=xx%2C%20%20yy%20%20%2Czz", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name8=xx%2C++yy++%2Czz", URLEncodedUtils.format(params, "US-ASCII"));
}
private List <NameValuePair> parse (final String params) {