posts - 495,comments - 227,trackbacks - 0
          HTTP協議是目前互聯網上最重要的協議,許多軟件與服務都需要依賴HTTP協議。
          雖然java.net這個package中包含了對HTTP的基本支持,但還有很多高級和復雜的功能無法實現,這不能不說是一個遺憾。
          JAVA機網[www.cnjm.net]
          HttpClient作為Apache的開源項目項目之一,為基于HTTP協議的操作提供了強大的客戶端執行支持,最新的版本為3.0RC3。
          下面通過一個例子簡要展示HttpClient的使用方法:
          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;

          iimport java.io.UnsupportedEncodingException;

          import java.util.*;

          import org.apache.commons.httpclient.Header;
          import org.apache.commons.httpclient.HostConfiguration;
          import org.apache.commons.httpclient.HttpClient;
          import org.apache.commons.httpclient.HttpConnection;
          import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
          import org.apache.commons.httpclient.NameValuePair;
          import org.apache.commons.httpclient.methods.GetMethod;
          import org.apache.commons.httpclient.methods.PostMethod;


          /**
          @author steven
          */
          public class HttpClientExample {

          //獲得ConnectionManager,設置相關參數
          private static MultiThreadedHttpConnectionManager manager =
          new MultiThreadedHttpConnectionManager();

          private static int connectionTimeOut = 20000;
          private static int socketTimeOut = 10000;
          private static int maxConnectionPerHost = 5;
          private static int maxTotalConnections = 40;

          //標志初始化是否完成的flag
          private static boolean initialed = false;

          //初始化ConnectionManger的方法
          public static void SetPara() {
          manager.getParams().setConnectionTimeout(connectionTimeOut);

          manager.getParams().setSoTimeout(socketTimeOut);
          manager.getParams()
          .setDefaultMaxConnectionsPerHost(maxConnectionPerHost);

          manager.getParams().setMaxTotalConnections(maxTotalConnections);

          initialed 
          = true;
          }

          //通過get方法獲取網頁內容
          public static String getGetResponseWithHttpClient(String url, String encode) {
          HttpClient client 
          = new HttpClient(manager);

          if (initialed) {
          HttpClientExample.SetPara();
          }


          GetMethod get 
          = new GetMethod(url);
          get.setFollowRedirects(
          true);

          String result 
          = null;

          StringBuffer resultBuffer 
          = new StringBuffer();

          try {

          client.executeMethod(get);


          //在目標頁面情況未知的條件下,不推薦使用getResponseBodyAsString()方法

          //String strGetResponseBody = post.getResponseBodyAsString();
          BufferedReader in = new BufferedReader(
          new InputStreamReader(
          get.getResponseBodyAsStream(),
          get.getResponseCharSet()));

          String inputLine 
          = null;

          while ((inputLine = in.readLine()) != null) {
          resultBuffer.append(inputLine);
          resultBuffer.append(
          "\n");
          }

          in.close();

          result 
          = resultBuffer.toString();

          //iso-8859-1 is the default reading encode
          result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
          get.getResponseCharSet(),
          encode);
          catch (Exception e) {
          e.printStackTrace();

          result 
          = "";
          finally {
          get.releaseConnection();

          return result;
          }
          }

          public static String getPostResponseWithHttpClient(String url,
          String encode) {
          HttpClient client 
          = new HttpClient(manager);


          if (initialed) {

          HttpClientExample.SetPara();
          }

          PostMethod post 
          = new PostMethod(url);
          post.setFollowRedirects(
          false);

          StringBuffer resultBuffer 
          = new StringBuffer();

          String result 
          = null;

          try {
          client.executeMethod(post);

          BufferedReader in 
          = new BufferedReader(
          new InputStreamReader(
          post.getResponseBodyAsStream(),
          post.getResponseCharSet()));
          String inputLine 
          = null;

          while ((inputLine = in.readLine()) != null) {
          resultBuffer.append(inputLine);
          resultBuffer.append(
          "\n");
          }

          in.close();


          //iso-8859-1 is the default reading encode
          result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
          post.getResponseCharSet(),
          encode);
          catch (Exception e) {
          e.printStackTrace();

          result 
          = "";
          finally {
          post.releaseConnection();

          return result;
          }
          }


          public static String getPostResponseWithHttpClient(String url,
          String encode,
          NameValuePair[] nameValuePair) {
          HttpClient client 
          = new HttpClient(manager);

          if (initialed) {
          HttpClientExample.SetPara();
          }

          PostMethod post 
          = new PostMethod(url);

          post.setRequestBody(nameValuePair);
          post.setFollowRedirects(
          false);

          String result 
          = null;
          StringBuffer resultBuffer 
          = new StringBuffer();


          try {
          client.executeMethod(post);
          BufferedReader in 
          = new BufferedReader(
          new InputStreamReader(
          post.getResponseBodyAsStream(),
          post.getResponseCharSet()));
          String inputLine 
          = null;

          while ((inputLine = in.readLine()) != null) {
          resultBuffer.append(inputLine);
          resultBuffer.append(
          "\n");

          }

          in.close();


          //iso-8859-1 is the default reading encode
          result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
          post.getResponseCharSet(),
          encode);
          catch (Exception e) {
          e.printStackTrace();

          result 
          = "";
          finally {
          post.releaseConnection();


          return result;
          }
          }

          private static String ConverterStringCode(String source, String srcEncode, String destEncode) {
          if (src != null) {
          try {

          return new String(src.getBytes(srcEncode), destEncode);
          catch (UnsupportedEncodingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          return "";
          }

          else {
          return "";
          }
          }
          }
          之后,就可以通過下面的代碼獲得目標網頁:
          String source = HttpClientExample.getGetResponseWithHttpClient("www.sina.com.cn", "GBK");

          注意,在默認情況下,HttpClient的Request的Head中
          JAVA手機網[www.cnjm.net]
          User-Agent的值是Jakarta Commons-HttpClient 3.0RC1,如果需要改變它(例如,變為Mozilla/4.0),必須在調用之前運行如下語句:
          System.getProperties().setProperty("httpclient.useragent", "Mozilla/4.0");
          來自:http://www.cnjm.net/tech/article1153.html
          posted on 2009-06-23 17:56 SIMONE 閱讀(1225) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 万源市| 大同市| 鄄城县| 衡南县| 出国| 苏州市| 彭泽县| 汤阴县| 台中市| 宁晋县| 福贡县| 泽库县| 白银市| 富顺县| 眉山市| 榆树市| 八宿县| 全州县| 汾阳市| 云安县| 平安县| 上饶县| 府谷县| 白朗县| 安岳县| 嘉禾县| 唐海县| 连州市| 鄂伦春自治旗| 北流市| 镶黄旗| 睢宁县| 蒲江县| 九台市| 台州市| 呼玛县| 穆棱市| 渑池县| 高密市| 临邑县| 建湖县|