如何解码Java中的http POST数据?
我正在使用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
- Android无效使用SingleClientConnManager:仍然分配了连接
- Java HttpURLConnection InputStream.close()挂起(或工作时间太长?)
- 完成HttpServletResponse但继续处理
- 如何以编程方式发送带参数的HTTP请求?
- 尝试在google app engine for java中实现异步http时遇到奇怪的exception
- DefaultHttpClient GET和POST命令Java Android
- Javamultithreading文件下载性能
- 将错误消息作为JSON对象发送
- Java Spring作为基于Akka的REST HTTP调用的客户端