You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ol...@apache.org on 2003/02/03 22:21:20 UTC
cvs commit: jakarta-commons/httpclient/src/test/org/apache/commons/httpclient TestMethodsNoHost.java TestWebappPostMethod.java
olegk 2003/02/03 13:21:20
Modified: httpclient/src/java/org/apache/commons/httpclient
HttpConstants.java
httpclient/src/java/org/apache/commons/httpclient/methods
PostMethod.java
httpclient/src/test/org/apache/commons/httpclient
TestMethodsNoHost.java TestWebappPostMethod.java
Log:
- fixes the problem with request content-encoding not taken into account when url-enconding parameters in POST method
- adds test case to ensure appropriate encoding of non-ascii characters such as German umlauts in POST method parameters
Problem reported by Mathis Thomas
Contributed by Oleg Kalnichevski
Revision Changes Path
1.5 +4 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConstants.java
Index: HttpConstants.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConstants.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- HttpConstants.java 28 Jan 2003 04:40:20 -0000 1.4
+++ HttpConstants.java 3 Feb 2003 21:21:15 -0000 1.5
@@ -81,7 +81,7 @@
public static final String HTTP_ELEMENT_CHARSET = "US-ASCII";
/** Default content encoding chatset */
- protected static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1";
+ public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1";
/** Log object for this class. */
private static final Log LOG = LogFactory.getLog(HttpConstants.class);
1.38 +21 -15 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java
Index: PostMethod.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- PostMethod.java 2 Feb 2003 04:30:13 -0000 1.37
+++ PostMethod.java 3 Feb 2003 21:21:19 -0000 1.38
@@ -123,9 +123,9 @@
/** My content encoding. */
private int contentEncoding = CUSTOM_CONTENT;
- /** The Content-Type header for www-form-urlcoded. */
- public static final Header URL_ENCODED_CONTENT_TYPE = new Header("Content-Type",
- "application/x-www-form-urlencoded");
+ /** The Content-Type for www-form-urlcoded. */
+ public static final String FORM_URL_ENCODED_CONTENT_TYPE =
+ "application/x-www-form-urlencoded";
/**
* The buffered request body consisting of <code>NameValuePair</code>s.
@@ -434,7 +434,7 @@
*
* @throws IllegalArgumentException if parameters is null
*/
- protected static String generateRequestBody(NameValuePair[] parameters)
+ protected static String generateRequestBody(NameValuePair[] parameters, final String charset)
throws IllegalArgumentException {
LOG.trace("enter PostMethod.generateRequestBody(NameValuePair[])");
@@ -452,9 +452,11 @@
String queryName = null;
try {
- queryName = URIUtil.encodeWithinQuery(parameter.getName());
- } catch (URIException urie) {
- LOG.error("encoding error within query name", urie);
+ queryName = URIUtil.encodeWithinQuery(parameter.getName(), charset);
+ } catch (URIException e) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Encosing error: " + e.toString());
+ }
queryName = parameter.getName();
}
@@ -462,9 +464,11 @@
String queryValue = null;
try {
- queryValue = URIUtil.encodeWithinQuery(parameter.getValue());
+ queryValue = URIUtil.encodeWithinQuery(parameter.getValue(), charset);
} catch (URIException e) {
- LOG.error("Encoding error within query value", e);
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Encosing error: " + e.toString());
+ }
queryValue = parameter.getValue();
}
buff.append(queryValue);
@@ -529,7 +533,7 @@
if (parametersBody == null) {
throw new IllegalArgumentException("Array of parameters may not be null");
}
- super.setRequestBody(generateRequestBody(parametersBody));
+ super.setRequestBody(generateRequestBody(parametersBody, getRequestCharSet()));
this.contentEncoding = URL_ENCODED_CONTENT;
}
@@ -551,7 +555,9 @@
if (this.contentEncoding == URL_ENCODED_CONTENT) {
//there are some parameters, so set the contentType header
- setRequestHeader(URL_ENCODED_CONTENT_TYPE);
+ if (getRequestHeader("Content-Type") == null) {
+ setRequestHeader("Content-Type", FORM_URL_ENCODED_CONTENT_TYPE);
+ }
}
}
1.15 +13 -6 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodsNoHost.java
Index: TestMethodsNoHost.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodsNoHost.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- TestMethodsNoHost.java 31 Jan 2003 23:23:17 -0000 1.14
+++ TestMethodsNoHost.java 3 Feb 2003 21:21:19 -0000 1.15
@@ -72,11 +72,13 @@
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.HeadMethod;
+import org.apache.commons.httpclient.util.URIUtil;
/**
* @author Rodney Waldhoff
* @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
* @author Ortwin Gl�ck
+ * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
* @version $Revision$ $Date$
*/
public class TestMethodsNoHost extends TestCase {
@@ -85,13 +87,14 @@
static final String NAME0 = "name0", VALUE0 = "value0";
static final String NAME1 = "name1", VALUE1 = "value1";
static final String NAME2 = "name2", VALUE2 = "value2";
+ static final String NAME3 = "name3", FUNNY_CHARS = "������";
+
static final NameValuePair PAIR = new NameValuePair(NAME, VALUE);
static final NameValuePair PAIR0 = new NameValuePair(NAME0, VALUE0);
static final NameValuePair PAIR1 = new NameValuePair(NAME1, VALUE1);
static final NameValuePair PAIR2 = new NameValuePair(NAME2, VALUE2);
+ static final NameValuePair PAIR3 = new NameValuePair(NAME3, FUNNY_CHARS);
-
-
// ------------------------------------------------------------ Constructor
public TestMethodsNoHost(String testName) {
@@ -119,6 +122,10 @@
assertEquals("name=value&name1=value1&name2=value2&hasSpace=a%20b%20c%20d",
post.getRequestBodyAsString());
+ post.setRequestBody(new NameValuePair[]{ PAIR3 });
+ assertEquals("name3=" + URIUtil.encodeWithinQuery(
+ FUNNY_CHARS, HttpConstants.DEFAULT_CONTENT_CHARSET),
+ post.getRequestBodyAsString());
}
public void testPostSetRequestBody() throws Exception {
1.2 +6 -6 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappPostMethod.java
Index: TestWebappPostMethod.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappPostMethod.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestWebappPostMethod.java 1 Feb 2003 06:33:05 -0000 1.1
+++ TestWebappPostMethod.java 3 Feb 2003 21:21:19 -0000 1.2
@@ -154,7 +154,7 @@
String stringBody = "pname1=pvalue1&pname2=pvalue2";
method.setRequestBody(stringBody);
- method.setRequestHeader(PostMethod.URL_ENCODED_CONTENT_TYPE);
+ method.setRequestHeader("Content-Type", PostMethod.FORM_URL_ENCODED_CONTENT_TYPE);
verifyParams(method);
}
@@ -180,7 +180,7 @@
new ByteArrayInputStream("pname1=pvalue1&pname2=pvalue2".getBytes());
method.setRequestBody(streamBody);
- method.setRequestHeader(PostMethod.URL_ENCODED_CONTENT_TYPE);
+ method.setRequestHeader("Content-Type", PostMethod.FORM_URL_ENCODED_CONTENT_TYPE);
verifyParams(method);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org
Re: cvs commit: jakarta-commons/httpclient/src/test/org/apache/commons/httpclient TestMethodsNoHost.java TestWebappPostMethod.java
Posted by Sung-Gu <je...@apache.org>.
Hi Oleg,
You seems like got an answer... ;)
BTW, the default should be just an default, when there is no set-up to be
referred.
That would be happened to be considered for the running configuration on the
runtime...for applications or threads.
Sung-Gu
> + public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1";
> Index: PostMethod.java
> + URIUtil.encodeWithinQuery (parameter.getName(), charset);