[英]How to decode http POST data in Java?
我正在使用Netty,我必須接受並解析http POST請求。 據我所知,Netty沒有內置的POST支持,只有GET。 (這是一個處理原始網絡操作的相當低級的庫。使用servlet容器,它可以開箱即用,但不是一個選項。)
如果我將POST請求的內容作為字節數組,那么將它解析為參數Map的最快且最無錯誤的方法是什么?
我自己可以寫這個,但是JDK中必須有一些方法可以使這更容易。 而且我敢打賭,還有一些問題需要處理。
Netty有一個高級POST請求解碼器(HttpPostRequestDecoder),它可以解碼Http屬性,FileUpload內容帶有分塊編碼。
這是一個簡單的表單解碼示例
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
HttpRequest request = (HttpRequest) e.getMessage();
HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(false), request);
InterfaceHttpData data = decoder.getBodyHttpData("fromField1");
if (data.getHttpDataType() == HttpDataType.Attribute) {
Attribute attribute = (Attribute) data;
String value = attribute.getValue()
System.out.println("fromField1 :" + value);
}
}
您可以在Netty 4.x中使用HttpPostRequestDecoder。 它支持各種POST機身。 Netty 4.x目前被標記為alpha,但非常穩定。 請參閱Xitrum中的BodyParser。
如果你只需要解析簡單的主體,你仍然可以在Netty 3.x中使用QueryStringDecoder ,將POST主體視為“?”之后的部分。 在URL中,像這樣:
QueryStringDecoder decoder = new QueryStringDecoder("?" +
request.getContent.toString(org.jboss.netty.util.CharsetUtil.UTF_8));
您使用的是哪個版本的netty? Netty的HttpRequest支持POST方法。 不知道任何庫可以解析字節來映射params。 這通常是servlet容器的作用。 看一下tomcat的源代碼,了解他們如何實現processParameters()方法http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http /Parameters.java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.