ice world

          There is nothing too difficult if you put your heart into it.
          posts - 104, comments - 103, trackbacks - 0, articles - 0

          HttpClientUtils

          Posted on 2013-07-27 11:53 IceWee 閱讀(1442) 評論(0)  編輯  收藏 所屬分類: Java
          備用。
          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;
          import java.io.Reader;
          import java.util.ArrayList;
          import java.util.List;

          import org.apache.http.HttpEntity;
          import org.apache.http.HttpHost;
          import org.apache.http.HttpResponse;
          import org.apache.http.NameValuePair;
          import org.apache.http.client.entity.UrlEncodedFormEntity;
          import org.apache.http.client.methods.HttpGet;
          import org.apache.http.client.methods.HttpPost;
          import org.apache.http.conn.params.ConnRoutePNames;
          import org.apache.http.cookie.Cookie;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.apache.http.protocol.HTTP;
          import org.apache.http.util.EntityUtils;

          /**
           * <p>
           * HTTP請求工具類
           * </p>
           * 
           * 
          @author IceWee
           * @date 2012-6-16
           * 
          @version 1.0
           
          */

          public class HttpClientUtils {
              
              
          private static final String NEXT_LINE = "\r\n";
              
          private static final String HEADER_USER_AGENT = "User-Agent"// 瀏覽器信息
              private static final String BROWSER_IE9 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"// 模擬Win7 x64/IE9

              
          /**
               * <p>
               * 網站登錄(Post方式)
               * </p>
               * 
               * 
          @param url 登錄請求URL
               * 
          @param proxyHost 網絡代理主機
               * 
          @param proxyPort 網絡代理端口
               * 
          @param nvps POST參數列表
               * 
          @return 用戶會話信息
               
          */

              
          public static List<Cookie> loginPost(String url, String proxyHost, int proxyPort, List <NameValuePair> nvps) {
                  List
          <Cookie> cookies = new ArrayList<Cookie>();
                  DefaultHttpClient httpClient 
          = new DefaultHttpClient();
                  
          try {
                      
          if (proxyHost != null && !"".equals(proxyHost)) // 網絡代理
                          HttpHost proxy = new HttpHost(proxyHost, proxyPort);
                          httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
                      }

                      HttpPost httpPost 
          = new HttpPost(url);
                      httpPost.setHeader(HEADER_USER_AGENT, BROWSER_IE9); 
          // 模擬瀏覽器
                      httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
                      httpClient.execute(httpPost);
                      cookies 
          = httpClient.getCookieStore().getCookies();
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }
           finally {
                      httpClient.getConnectionManager().shutdown();
                  }

                  
          return cookies;
              }

              
              
          /**
               * 網站登錄(Get方式)
               * 
               * 
          @param url 登錄URL
               * 
          @param encode 網站頁面編碼
               * 
          @param proxyHost 網絡代理主機
               * 
          @param proxyPort 網絡代理端口
               * 
          @return Cookie
               
          */

              
          public static List<Cookie> loginGet(String url, String encode, String proxyHost, int proxyPort) {
                  List
          <Cookie> cookies = null;
                  DefaultHttpClient httpClient 
          = new DefaultHttpClient();
                  
          try {
                      
          if (proxyHost != null && !"".equals(proxyHost)) // 網絡代理
                          HttpHost proxy = new HttpHost(proxyHost, proxyPort);
                          httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
                      }

                      HttpGet httpGet 
          = new HttpGet(url);
                      httpGet.setHeader(HEADER_USER_AGENT, BROWSER_IE9); 
          // 模擬瀏覽器
                      HttpResponse response = httpClient.execute(httpGet);
                      
          boolean succeed = getLoginResult(response, encode);
                      
          if (succeed) {
                          cookies 
          = httpClient.getCookieStore().getCookies();
                      }
           else {
                          cookies 
          = null;
                      }

                  }
           catch (Exception e) {
                      e.printStackTrace();
                      cookies 
          = null;
                  }
           finally {
                      httpClient.getConnectionManager().shutdown();
                  }

                  
          return cookies;
              }

              
              
          /**
               * <p>
               * 網站注銷(Get方式)
               * </p>
               * 
               * 
          @param url 注銷請求URL
               * 
          @param proxyHost 網絡代理主機
               * 
          @param proxyPort 網絡代理端口
               * 
          @param cookies 用戶會話信息
               
          */

              
          public static void logout(String url, String proxyHost, int proxyPort, List<Cookie> cookies) {
                  DefaultHttpClient httpClient 
          = new DefaultHttpClient();
                  
          try {
                      sendCookie(httpClient, cookies);
                      
          if (proxyHost != null && !"".equals(proxyHost)) // 網絡代理
                          HttpHost proxy = new HttpHost(proxyHost, proxyPort);
                          httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
                      }

                      HttpGet httpGet 
          = new HttpGet(url);
                      httpGet.setHeader(HEADER_USER_AGENT, BROWSER_IE9); 
          // 模擬瀏覽器
                      httpClient.execute(httpGet);
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }
           finally {
                      httpClient.getConnectionManager().shutdown();
                  }

              }

              
              
          /**
               * <p>
               * POST請求網址
               * </p>
               * 
               * 
          @param url 請求URL
               * 
          @param proxyHost 網絡代理主機
               * 
          @param proxyPort 網絡代理端口
               * 
          @param encode 網站編碼
               * 
          @param nvps 請求參數列表
               * 
          @param cookies 用戶會話信息
               * 
          @return 網站源碼
               
          */

              
          public static String sendPostRequest(String url, String proxyHost, int proxyPort, String encode, List <NameValuePair> nvps, List<Cookie> cookies) {
                  String responseText 
          = "";
                  DefaultHttpClient httpClient 
          = new DefaultHttpClient();
                  
          try {
                      sendCookie(httpClient, cookies); 
          // 發送Cookie
                      if (proxyHost != null && !"".equals(proxyHost)) // 網絡代理
                          HttpHost proxy = new HttpHost(proxyHost, proxyPort);
                          httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
                      }

                      HttpPost httpPost 
          = new HttpPost(url);
                      httpPost.setHeader(HEADER_USER_AGENT, BROWSER_IE9); 
          // 模擬瀏覽器
                      httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
                      HttpResponse response 
          = httpClient.execute(httpPost);
                      HttpEntity entity 
          = response.getEntity();
                      responseText 
          = getResponse(entity, encode); // 獲取返回頁面源碼
                      EntityUtils.consume(entity);
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }
           finally {
                      httpClient.getConnectionManager().shutdown();
                  }

                  
          return responseText;
              }

              
              
          /**
               * <p>
               * 解析返回流生成文本
               * </p>
               * 
               * 
          @param entity
               * 
          @param encode
               * 
          @return
               * 
          @throws IOException
               
          */

              
          private static String getResponse(HttpEntity entity, String encode) throws IOException {
                  StringBuffer buffer 
          = new StringBuffer();
                  InputStream in 
          = entity.getContent();
                  Reader reader 
          = new InputStreamReader(in, encode);
                  BufferedReader bufferedReader 
          = new BufferedReader(reader);
                  String line;
                  
          while ((line = bufferedReader.readLine()) != null{
                      line 
          = new String(line.getBytes());
                      buffer.append(line).append(NEXT_LINE);
                  }

                  bufferedReader.close();
                  reader.close();
                  
          return buffer.toString();
              }

              
              
          /**
               * <p>
               * 發送Cookie
               * </p>
               * 
               * 
          @param httpClient
               * 
          @param cookies
               
          */

              
          private static void sendCookie(DefaultHttpClient httpClient, List<Cookie> cookies) {
                  
          if (cookies != null{
                      
          for (Cookie cookie : cookies) {
                          httpClient.getCookieStore().addCookie(cookie);
                      }

                  }

              }

              
              
          /**
               * <p>
               * 解析出登錄結果,北大法寶登錄成功失敗分別返回如下信息:<br>
               * 成功:p_LoginUser = "elsevier";dispResult('');<br>
               * 失敗:p_AlertInfo = "對不起,您的賬號在“法律法規”庫在線人數已經超過最大允許范圍!如有任何疑問請致電400-810-8266轉117";dispResult('');
               * </p>
               * 
               * 
          @param response
               * 
          @param encode
               * 
          @return
               * 
          @throws IOException
               
          */

              
          private static boolean getLoginResult(HttpResponse response, String encode) throws IOException {
                  
          boolean result = false;
                  HttpEntity entity 
          = response.getEntity();
                  String responseText 
          = getResponse(entity, encode);
                  EntityUtils.consume(entity);
                  
          if (responseText != null{
                      
          if (responseText.contains("p_LoginUser")) {
                          result 
          = true;
                      }
           else if (responseText.contains("p_AlertInfo")) {
                          result 
          = false;
                      }

                  }
           else {
                      result 
          = false;
                  }

                  
          return result;
              }

              
          }


          主站蜘蛛池模板: 陇南市| 鹿泉市| 南木林县| 呼和浩特市| 民县| 武陟县| 商河县| 龙里县| 禄劝| 伊金霍洛旗| 府谷县| 东阳市| 通山县| 江达县| 万州区| 浪卡子县| 明星| 纳雍县| 麻城市| 瑞安市| 忻城县| 旌德县| 云霄县| 龙江县| 苗栗市| 凭祥市| 佛学| 新宁县| 攀枝花市| 普格县| 略阳县| 浦北县| 巴林左旗| 万山特区| 米泉市| 兴安盟| 莱芜市| 隆尧县| 通辽市| 阿拉善盟| 东港市|