HttpClient4 Post XML到一個服務器上

HttpClient4 Post XML到一個服務器上
 
 
如今網上介紹的HttpClient基本上全是3.x版本的內容,HttpClient4的API變化相對3已經變化很大,對HttpClient4作了簡單的研究後,完成了一個HttpClient4 Post XML功能。
 
對於POST方式,最早想到的就是表單提交了,POST XML天然想到的就是定義一個變量名,好比叫xmldata,而後將這個參數的值POST出去,在服務端接收的時候,天然也是經過 requset.getParameter("xmldata")方式來接收。
 
如今我在這裏要作的不是經過上面的方式,而是不指定參數名來Post,實際上就是將一個流寫入請求。
 
下面是具體的實現方式:
 
一、參數名方式POST XML數據
import org.apache.http.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.*;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.*;

/**
* 經過指定參數名的方式POST XML
*
* @author leizhimin 2010-7-8 22:29:28
*/

public class TestPost {
         public static void main(String[] args) throws IOException {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost( "http://localhost:8080/waitsrv/GenXmlServlet");

                List<NameValuePair> formparams = new ArrayList<NameValuePair>();
                formparams.add(new BasicNameValuePair("xmldate", "<html>你好啊啊</html>"));
                formparams.add(new BasicNameValuePair("info", "xxxxxxxxx"));
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "GBK");
//                entity.setContentType("text/xml; charset=GBK");
                httppost.setEntity(entity);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity resEntity = response.getEntity();
                InputStreamReader reader = new InputStreamReader(resEntity.getContent(), "ISO-8859-1");
                char[] buff = new char[1024];
                int length = 0;
                while ((length = reader.read(buff)) != -1) {
                        System.out.println(new String(buff, 0, length));
                        httpclient.getConnectionManager().shutdown();
                }
        }
}
 
二、不指定參數名的方式來POST數據
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.entity.*;


import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
* 不指定參數名的方式來POST數據
*
* @author leizhimin 2010-7-8 3:22:53
*/

public class TestPostXml {
         public static void main(String[] args) throws IOException {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost( "http://localhost:8080/waitsrv/GenXmlServlet");
                StringEntity myEntity = new StringEntity("<html>你好啊啊</html>", "GBK");
                httppost.addHeader("Content-Type", "text/xml");
                httppost.setEntity(myEntity);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity resEntity = response.getEntity();
                InputStreamReader reader = new InputStreamReader(resEntity.getContent(), "ISO-8859-1");
                char[] buff = new char[1024];
                int length = 0;
                while ((length = reader.read(buff)) != -1) {
                        System.out.println(new String(buff, 0, length));
                }
                httpclient.getConnectionManager().shutdown();
        }
}
 
服務端接收方式:
package com;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
* 接收XLM請求
*
* @author leizhimin 2010-7-8 1:02:42
*/

public class GenXmlServlet extends HttpServlet {
         protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//                String xml = req.getParameter("xmldata");
                resp.setContentType( "text/xml");
                resp.setCharacterEncoding( "GBK");
                PrintWriter out = resp.getWriter();
//                out.println(xml);
//                System.out.println(xml);
                System.out.println( "----------------------");
                InputStreamReader reader = new InputStreamReader(req.getInputStream(), "GBK");
                 char[] buff = new char[1024];
                 int length = 0;
                 while ((length = reader.read(buff)) != -1) {
                        String x = new String(buff, 0, length);
                        System.out.println(x);
                        out.print(x);
                }
        }

         protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                resp.setContentType( "text/html");
                PrintWriter out = resp.getWriter();
                out.println( "<html>");
                out.println( "<head>");
                out.println( "<title>Hello World!</title>");
                out.println( "</head>");
                out.println( "<body>");
                out.println( "<h1>Hello World!!</h1>");
                out.println( "</body>");
                out.println( "</html>");
        }
}
 
web.xml
<? xml version ="1.0" encoding ="UTF-8" ?>
< web-app xmlns ="http://java.sun.com/xml/ns/javaee"
                 xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                 version ="2.5" >

         < servlet >
                 < servlet-name >GenXmlServlet </ servlet-name >
                 < servlet-class >com.GenXmlServlet </ servlet-class >
         </ servlet >
         < servlet-mapping >
                 < servlet-name >GenXmlServlet </ servlet-name >
                 < url-pattern >/GenXmlServlet </ url-pattern >
         </ servlet-mapping >
</ web-app >
 
 
三、在2的基礎,上改成單線程重用鏈接模式
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.entity.*;


import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
* 不指定參數名的方式來POST數據,單線程重用鏈接模式
*
* @author leizhimin 2010-7-8 3:22:53
*/

public class TestPostXml2 {
         public static void main(String[] args) throws IOException {
                SingleClientConnManager sccm = new SingleClientConnManager();
                HttpClient httpclient = new DefaultHttpClient(sccm);
//                HttpGet httpget = new HttpGet(urisToGet[i]);
//                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost( "http://localhost:8080/waitsrv/GenXmlServlet");
                StringEntity myEntity = new StringEntity("<html>你好啊啊</html>", "GBK");
                httppost.addHeader("Content-Type", "text/xml");
                httppost.setEntity(myEntity);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity resEntity = response.getEntity();
                InputStreamReader reader = new InputStreamReader(resEntity.getContent(), "ISO-8859-1");
                char[] buff = new char[1024];
                int length = 0;
                while ((length = reader.read(buff)) != -1) {
                        System.out.println(new String(buff, 0, length));
                }
                httpclient.getConnectionManager().shutdown();
        }
}
 
 
 
 
相關文章
相關標籤/搜索