您的位置:首页 > 理论基础 > 计算机网络

关于通过JAVA的HTTP POST请求传输XML型数据

2013-05-21 19:16 405 查看
关于跨域传输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类型再次请求真正的接口就可以接收到数据。我是这样想到解决方法的,如果有朋友有更好的方法,请留言给个提示,我也去研究下。

这章内容虽然很简单,但是对于新手的我们来说一出问题可能就会被弄得焦头烂额,大家有兴趣可以记下,呵呵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: