簡體   English   中英

如何解碼Java中的http POST數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM