Java Post Xml问题

七 15th, 2011

一般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());
标签:
>>原创文章,欢迎转载。转载请注明:转载自Ruby迷,谢谢!
>>原文链接地址:Java Post Xml问题
目前还没有任何评论.