关于通过JAVA的HTTP POST请求传输XML型数据
2016-08-17 15:45
756 查看
关于跨域传输XML数据,由于刚接触到,碰到了许多问题。这里把一些相关方法记录下来,也给大家提供一些参考(新手适用,高手请过 嘿嘿)。
Client:通过HTTP POST方式请求并接收返回数据。(用于请求别人的接口,并接收返回的数据)
Server:接收HTTP POST请求过来的数据并返回数据。(用于别人请求自己的接口,接收请求数据并返回数据)
下面是大致实现代码:
Client:
public void test() {
try {
HttpServletResponse response = ServletActionContext.getResponse();
//设置返回数据的编码类型
response.setCharacterEncoding("GBK");
String xml = "-<-?-xml -version=-"1.0-" -encoding=-"gb2312-" -?->"+
"-<-ddd->-"
//里面若干XML数据,格式自己改下,被过滤了加些东西
"-<-/ddd->-";
String url = "请求地址";
HttpClient client = new HttpClient();
//设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
//使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
//HttpMethod method = new GetMethod("http://java.sun.com");
//使用POST方法
PostMethod post = new PostMethod(url);
//设置要发送请求的XML数据,这里还可以不用直接发送XML数据,可以设置参数
//post.setParameter(key, value);
post.setRequestEntity(new StringRequestEntity(xml, "text/xml", "GBK"));
//执行请求
client.executeMethod(post);
//打印返回的信息
byte[] by = post.getResponseBody();
PrintWriter pw = response.getWriter();
pw.print(new String(by));
//释放连接
post.releaseConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
Server:
这里是关键部分代码
//------------接收物流方请求的XML数据-----------------------
//获取request接收到的流长度,因为这里如果是使用Struts2框架,当发送方把Content-type
//设置成application/x-www-form-urlencoded会导致传送过来的数据流被过滤掉
//如果这里len不为-1,而下面的br又为空的话,说明被过滤掉了。
int len = request.getContentLength();
System.out.println("数据流长度:" +len);
//获取HTTP请求的输入流
InputStream is = request.getInputStream();
//已HTTP请求输入流建立一个BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
//BufferedReader br = request.getReader();
//读取HTTP请求内容
String buffer = null;
StringBuffer sb = new StringBuffer();
while ((buffer = br.readLine()) != null) {
//在页面中显示读取到的请求参数
sb.append(buffer);
}
关于解决:request.getInputStream或request.getReader()被过滤掉的问题,可以用JSP先接收数据,然后再把content-type设置成xml/text类型再次请求真正的接口就可以接收到数据。我是这样想到解决方法的,如果有朋友有更好的方法,请留言给个提示,我也去研究下。
这章内容虽然很简单,但是对于新手的我们来说一出问题可能就会被弄得焦头烂额,大家有兴趣可以记下,呵呵
转载地址:http://blog.csdn.net/liweibin_/article/details/8956957
Client:通过HTTP POST方式请求并接收返回数据。(用于请求别人的接口,并接收返回的数据)
Server:接收HTTP POST请求过来的数据并返回数据。(用于别人请求自己的接口,接收请求数据并返回数据)
下面是大致实现代码:
Client:
public void test() {
try {
HttpServletResponse response = ServletActionContext.getResponse();
//设置返回数据的编码类型
response.setCharacterEncoding("GBK");
String xml = "-<-?-xml -version=-"1.0-" -encoding=-"gb2312-" -?->"+
"-<-ddd->-"
//里面若干XML数据,格式自己改下,被过滤了加些东西
"-<-/ddd->-";
String url = "请求地址";
HttpClient client = new HttpClient();
//设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
//使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
//HttpMethod method = new GetMethod("http://java.sun.com");
//使用POST方法
PostMethod post = new PostMethod(url);
//设置要发送请求的XML数据,这里还可以不用直接发送XML数据,可以设置参数
//post.setParameter(key, value);
post.setRequestEntity(new StringRequestEntity(xml, "text/xml", "GBK"));
//执行请求
client.executeMethod(post);
//打印返回的信息
byte[] by = post.getResponseBody();
PrintWriter pw = response.getWriter();
pw.print(new String(by));
//释放连接
post.releaseConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
Server:
这里是关键部分代码
//------------接收物流方请求的XML数据-----------------------
//获取request接收到的流长度,因为这里如果是使用Struts2框架,当发送方把Content-type
//设置成application/x-www-form-urlencoded会导致传送过来的数据流被过滤掉
//如果这里len不为-1,而下面的br又为空的话,说明被过滤掉了。
int len = request.getContentLength();
System.out.println("数据流长度:" +len);
//获取HTTP请求的输入流
InputStream is = request.getInputStream();
//已HTTP请求输入流建立一个BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
//BufferedReader br = request.getReader();
//读取HTTP请求内容
String buffer = null;
StringBuffer sb = new StringBuffer();
while ((buffer = br.readLine()) != null) {
//在页面中显示读取到的请求参数
sb.append(buffer);
}
关于解决:request.getInputStream或request.getReader()被过滤掉的问题,可以用JSP先接收数据,然后再把content-type设置成xml/text类型再次请求真正的接口就可以接收到数据。我是这样想到解决方法的,如果有朋友有更好的方法,请留言给个提示,我也去研究下。
这章内容虽然很简单,但是对于新手的我们来说一出问题可能就会被弄得焦头烂额,大家有兴趣可以记下,呵呵
转载地址:http://blog.csdn.net/liweibin_/article/details/8956957
相关文章推荐
- 关于通过JAVA的HTTP POST请求传输XML型数据
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- java通过Http get post请求url获取数据
- 【Android】【嘿!Java】Android工程、Java工程中通过HttpClient请求网络数据的不同方式
- jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。
- Android 通过HTTPCLINET POST请求互联网数据
- Java客户端通过Http发送POST请求上传文件到web服务器
- Android 通过HTTP POST请求互联网数据
- (转载)利用HttpWebRequest通过POST Json数据在.net后台实现不同平台间的数据传输
- Java 通过httpClient Post方式提交xml,并从服务端返回数据
- PHP如何通过Http Post请求发送Json对象数据?
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- Java HttpClient Post请求发送数据乱码
- java http 请求之post json数据
- Java 模拟HTTP Get Post请求,关于帖子回帖的(未测试)
- java http 请求之post json数据
- 关于java 发送http json数据格式请求时,服务器端如何接收json数据并解析
- Java后台发送Post请求,数据传输格式JSON
- Java客户端通过Http发送POST请求上传文件到web服务器
- Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)