Java Post Xml问题
一般POST或GET中的数据的都是key=value键值对形式。其实POST可以更强大,我们可以直接POST一段XML。
Java 的 Servlet得到这一段XML有两种方法:
1、request.getReader()得到一个BufferedReader;
2、request.getInputStream()得到一个ServletInputStream得到XML数据
两种方法其实是一样的,第一种方法只是对第二种方法的简单包装。
如果POST XML的URL是这样
http://www.example.com/posttest?api=login
就要小心了。
如果你先执行String api = request.getParameter(“api”)可以得到api=login。但如果这时再进行request.getReader()/request.getInputStream()就不能得到XML,只会得到空字符串。
猜想:
可能是request.getParameter(“api”)时做了一些参数校验操作,把所有不是键值对的参数过滤掉,有时间看一下源码。
解决方法也很巧妙:
既然执行request.getParameter(“api”)会过滤掉XML,我就先取得XML数据,最后再执行request.getParameter(“api”)。
HttpClient 3.* 发送XML方法:
用HttpClient来做一些测试是很常见的,下面献上代码:
HttpClient client = new HttpClient(); //设置超时是一个好习惯 client.getHttpConnectionManager().getParams().setConnectionTimeout(3000); PostMethod post = new PostMethod(KUAIPAN_URL + api); // 指定请求内容的类型 post.setRequestHeader("Content-type", "text/xml; charset=UTF-8"); data = "xml-string" RequestEntity entity = new StringRequestEntity(data, "text/xml", "UTF-8"); post.setRequestEntity(entity); client.executeMethod(post); System.out.println(post.getResponseBodyAsString());