少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          //研究了一下午,終于發現一個問題,寫這個代碼不是很難的,難的是找一個能代理的IP地址,實際網上的好多代碼都可以用滴,只是代理IP和Port有問題而已,廢話少說,直接上代碼:
          1、先說Get的代理(首先提供一個Servlet的Get的http服務)

          package com.abin.lee.servlet;

          import javax.servlet.ServletConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletOutputStream;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import java.io.BufferedWriter;
          import java.io.IOException;
          import java.io.OutputStreamWriter;

          /**
           * Created with IntelliJ IDEA.
           * User: abin
           * Date: 13-4-18
           * Time: 上午8:39
           * To change this template use File | Settings | File Templates.
           */
          public class HttpClientGetProxyServlet extends HttpServlet {
              public void init(ServletConfig config) throws ServletException {
                  super.init(config);
              }
              public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException {
                  System.out.println("receive httpGet request");
                  String userName=request.getParameter("userName");
                  String passWord=request.getParameter("passWord");
                  String localIp=request.getLocalAddr();
                  String localName=request.getLocalName();
                  int localPort=request.getLocalPort();
                  int ServerPort=request.getServerPort();
                  String leeHeader=request.getHeader("lee");
                  System.out.println("userName="+userName+",passWord="+passWord+",localIp="+localIp+",localName="+localName+",localPort="+localPort);
                  System.out.println("ServerPort="+ServerPort+",leeHeader="+leeHeader);
                  String remoteIp=request.getRemoteAddr();
                  String remoteHost=request.getRemoteHost();
                  int remotePort=request.getRemotePort();
                  System.out.println("remoteIp="+remoteIp+",remoteHost="+remoteHost+",remotePort="+remotePort);

                  ServletOutputStream out=response.getOutputStream();
                  BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));
                  writer.write("success");
                  writer.flush();
                  writer.close();

              }
          }




          HttpGet代理測試類:

          package com.abin.lee.ssh.senior.proxy.httpclient;
          import org.apache.http.Header;
          import org.apache.http.HttpEntity;
          import org.apache.http.HttpHost;
          import org.apache.http.HttpResponse;
          import org.apache.http.client.methods.HttpGet;
          import org.apache.http.conn.params.ConnRoutePNames;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.apache.http.util.EntityUtils;
          import org.junit.Test;

          public class HttpClientGetProxyServletTest {
           public static final String HttpGetProxyUrl="http://localhost:8100/MyThread/HttpClientGetProxyServlet";
           @Test
              public  void testHttpClientPostProxyServlet()throws Exception {
                  HttpHost proxy = new HttpHost("10.10.10.10", 1443, "http");
                  DefaultHttpClient httpclient = new DefaultHttpClient();
                  try {
                      httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

                      HttpHost target = new HttpHost("localhost", 8100, "http");
                      HttpGet request = new HttpGet(HttpGetProxyUrl+"?"+"userName=abin&passWord=varyall");
                      request.setHeader("lee", "lee");
                      System.out.println("executing request to " + target + " via " + proxy);
                      HttpResponse rsp = httpclient.execute(target, request);
                      HttpEntity entity = rsp.getEntity();

                      System.out.println("----------------------------------------");
                      System.out.println(rsp.getStatusLine());
                      Header[] headers = rsp.getAllHeaders();
                      for (int i = 0; i<headers.length; i++) {
                          System.out.println(headers[i]);
                      }
                      System.out.println("----------------------------------------");

                      if (entity != null) {
                          System.out.println(EntityUtils.toString(entity));
                      }

                  } finally {
                      // When HttpClient instance is no longer needed,
                      // shut down the connection manager to ensure
                      // immediate deallocation of all system resources
                      httpclient.getConnectionManager().shutdown();
                  }
              }
          }







          //正常測試代碼,非代理

          package com.abin.lee.ssh.senior.proxy.httpclient;

          import java.io.BufferedReader;
          import java.io.InputStreamReader;

          import org.apache.http.HttpEntity;
          import org.apache.http.HttpResponse;
          import org.apache.http.client.HttpClient;
          import org.apache.http.client.methods.HttpGet;
          import org.apache.http.entity.StringEntity;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.junit.Test;

          public class HttpClientGetServletTest {
           public static final String HttpGetUrl = "http://localhost:8100/MyThread/HttpClientGetProxyServlet";

           @Test
           public void HttpClientGetServlet() {
            HttpClient httpClient = new DefaultHttpClient();
            StringEntity reqEntity = null;
            HttpGet httpGet = null;
            try {
             HttpGet request = new HttpGet(HttpGetUrl+"?"+"userName=abin&passWord=varyall");
                      request.setHeader("lee", "lee");
             // 目標地址
             System.out.println("請求: " + httpGet.getRequestLine());
             // 執行
             HttpResponse response = httpClient.execute(httpGet);
             HttpEntity entity = response.getEntity();
             System.out.println("----------------------------------------");
             System.out.println(response.getStatusLine());
             if (entity != null) {
              System.out.println("Response content length: "
                + entity.getContentLength());
             }
             // 顯示結果
             BufferedReader reader = new BufferedReader(new InputStreamReader(
               entity.getContent(), "UTF-8"));
             String line = null;
             while ((line = reader.readLine()) != null) {
              System.out.println(line);
             }
            } catch (Exception e) {
             e.printStackTrace();
            } finally {
             if (!httpGet.isAborted()) {
              httpGet.abort();
             }
             httpClient.getConnectionManager().shutdown();
            }
           }
          }




          //servlet配置

             <servlet>
                       <servlet-name>HttpClientGetProxyServlet</servlet-name>
                       <servlet-class>com.abin.lee.servlet.HttpClientGetProxyServlet</servlet-class>
                   </servlet>
                   <servlet-mapping>
                       <servlet-name>HttpClientGetProxyServlet</servlet-name>
                       <url-pattern>/HttpClientGetProxyServlet</url-pattern>
                   </servlet-mapping>






          我這里的IP和端口不一定能用喲,自己找能用的!!代碼是100%沒問題的,經過生產環境測試的喲!!!
          posted on 2013-04-18 17:50 abin 閱讀(1433) 評論(0)  編輯  收藏 所屬分類: httpClient
          主站蜘蛛池模板: 泾川县| 伊金霍洛旗| 丰镇市| 白银市| 通化市| 池州市| 柏乡县| 汝州市| 邢台市| 涿鹿县| 凤台县| 洱源县| 和政县| 丹东市| 丰台区| 古交市| 巴林左旗| 容城县| 西吉县| 定结县| 西乡县| 罗平县| 宁远县| 全南县| 大宁县| 石景山区| 朝阳区| 太康县| 通许县| 常德市| 新民市| 织金县| 临沭县| 彭阳县| 大关县| 东光县| 马关县| 敦化市| 偃师市| 大余县| 江孜县|