關於通過JAVA的HTTP POST請求傳輸XML型數據

關於跨域傳輸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

發佈了49 篇原創文章 · 獲贊 37 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章