You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jg...@apache.org on 2007/08/18 03:30:05 UTC
svn commit: r567197 - in
/geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec:
HttpMessage.java HttpRequestEncoder.java protocol/HttpDecoder.java
Author: jgenender
Date: Fri Aug 17 18:30:04 2007
New Revision: 567197
URL: http://svn.apache.org/viewvc?view=rev&rev=567197
Log:
Get requests encoding properly
Modified:
geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpMessage.java
geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestEncoder.java
geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/protocol/HttpDecoder.java
Modified: geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpMessage.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpMessage.java?view=diff&rev=567197&r1=567196&r2=567197
==============================================================================
--- geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpMessage.java (original)
+++ geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpMessage.java Fri Aug 17 18:30:04 2007
@@ -28,6 +28,9 @@
public class HttpMessage {
+ public final static String CONTENT_TYPE = "Content-Type";
+ public final static String CONTENT_LENGTH = "Content-Length";
+
protected List<NameValuePair> headers = new ArrayList<NameValuePair>();
protected List<Cookie> cookies = new ArrayList<Cookie>();
protected String contentType;
Modified: geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestEncoder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestEncoder.java?view=diff&rev=567197&r1=567196&r2=567197
==============================================================================
--- geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestEncoder.java (original)
+++ geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestEncoder.java Fri Aug 17 18:30:04 2007
@@ -26,11 +26,9 @@
import org.apache.mina.common.IoSession;
import org.apache.mina.common.ByteBuffer;
import org.apache.ahc.util.NameValuePair;
+import org.apache.ahc.util.EncodingUtil;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
@@ -39,6 +37,7 @@
public class HttpRequestEncoder extends ProtocolEncoderAdapter {
private static final Set TYPES;
private static final byte[] CRLF = new byte[]{0x0D, 0x0A};
+ private static final String POST_CONTENT_TYPE = "application/x-www-form-urlencoded";
private URL url;
static {
@@ -64,11 +63,34 @@
buf.setAutoExpand(true);
try {
- // output all headers except the content length
+ //If we have content, lets create the query string
+ int attrCount = msg.getAttributes().size();
+ String urlAttrs = "";
+ if (attrCount > 0){
+ NameValuePair attrs[] = new NameValuePair[attrCount];
+ Set<Map.Entry<String,String>> set = msg.getAttributes().entrySet();
+ int i = 0;
+ for (Map.Entry<String, String> entry: set){
+ attrs[i].setName(entry.getKey());
+ attrs[i++].setValue(entry.getValue());
+ }
+ urlAttrs = EncodingUtil.formUrlEncode(attrs, Charset.defaultCharset().toString());
+ }
+
CharsetEncoder encoder = Charset.defaultCharset().newEncoder();
buf.putString(msg.getRequestMethod(), encoder);
buf.putString(" ", encoder);
buf.putString(msg.getPath(), encoder);
+ //If its a GET, append the attributes
+ if (msg.getRequestMethod().equals(HttpRequestMessage.REQUEST_GET) && attrCount > 0) {
+ //If there is not already a ? in the query, append one, otherwise append a &
+ if (!msg.getPath().contains("?")){
+ buf.putString("?", encoder);
+ } else {
+ buf.putString("&", encoder);
+ }
+ buf.putString(urlAttrs, encoder);
+ }
buf.putString(" HTTP/1.1", encoder);
buf.put(CRLF);
@@ -112,11 +134,27 @@
//If this is a POST, then we need a content length and type
if (msg.getRequestMethod().equals(HttpRequestMessage.REQUEST_POST)) {
+ byte content[] = urlAttrs.getBytes();
+ //Type
+ buf.putString(HttpMessage.CONTENT_TYPE, encoder);
+ buf.putString(": ", encoder);
+ buf.putString(POST_CONTENT_TYPE, encoder);
+ buf.put(CRLF);
+
+ //Length
+ buf.putString(HttpMessage.CONTENT_LENGTH, encoder);
+ buf.putString(": ", encoder);
+ buf.putString(content.length + "", encoder);
+ buf.put(CRLF);
+ //Blank line
+ buf.put(CRLF);
+ buf.put(content);
+ } else {
+ //Blank line
+ buf.put(CRLF);
}
- //Blank line
- buf.put(CRLF);
} catch (CharacterCodingException ex) {
ex.printStackTrace();
}
Modified: geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/protocol/HttpDecoder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/protocol/HttpDecoder.java?view=diff&rev=567197&r1=567196&r2=567197
==============================================================================
--- geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/protocol/HttpDecoder.java (original)
+++ geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/protocol/HttpDecoder.java Fri Aug 17 18:30:04 2007
@@ -21,6 +21,7 @@
import org.apache.ahc.codec.HttpResponseMessage;
import org.apache.ahc.codec.Cookie;
+import org.apache.ahc.codec.HttpMessage;
import org.apache.ahc.util.DateUtil;
import org.apache.mina.common.ByteBuffer;
@@ -40,8 +41,6 @@
*/
private static final byte LF = 10;
- public final static String CONTENT_TYPE = "Content-Type";
- public final static String CONTENT_LENGTH = "Content-Length";
public final static String SET_COOKIE = "Set-Cookie";
public final static String COOKIE_COMMENT = "comment";
@@ -110,11 +109,11 @@
if (cookie != null) msg.addCookie(cookie);
}
- if (name.equalsIgnoreCase(CONTENT_TYPE)) {
+ if (name.equalsIgnoreCase(HttpMessage.CONTENT_TYPE)) {
msg.setContentType(value);
}
- if (name.equalsIgnoreCase(CONTENT_LENGTH)) {
+ if (name.equalsIgnoreCase(HttpMessage.CONTENT_LENGTH)) {
msg.setContentLength(Integer.parseInt(value));
}