少年阿賓

          那些青春的歲月

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

          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 HttpClientPostProxyServlet extends HttpServlet {
              public void init(ServletConfig config) throws ServletException {
                  super.init(config);
              }
              public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException {
                  System.out.println("receive httpPost 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();
                  String remoteUser=request.getRemoteUser();
                  System.out.println("remoteIp="+remoteIp+",remoteHost="+remoteHost+",remotePort="+remotePort+",remoteUser="+remoteUser);

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

              }
          }




          Post代理測試類:
          //HttpClientPostProxyServletTest.java

          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.HttpPost;
          import org.apache.http.conn.params.ConnRoutePNames;
          import org.apache.http.entity.StringEntity;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.apache.http.util.EntityUtils;
          import org.junit.Test;

          public class HttpClientPostProxyServletTest {
           public static final String HttpPostProxyUrl="http://localhost:8100/MyThread/HttpClientPostProxyServlet";
           @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");
                      HttpPost request = new HttpPost(HttpPostProxyUrl);
                StringEntity reqEntity = new StringEntity("userName=abin&passWord=varyall");  
                reqEntity.setContentType("application/x-www-form-urlencoded");  
                request.setEntity(reqEntity);  
                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.HttpPost;
          import org.apache.http.entity.StringEntity;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.junit.Test;

          public class HttpClientPostServletTest {
           public static final String HttpPostUrl="http://localhost:8100/MyThread/HttpClientPostProxyServlet";
           @Test
           public void testHttpClientPostServlet(){
             HttpClient httpClient = new DefaultHttpClient();
             HttpPost httpPost = new HttpPost(HttpPostUrl);
            try {
                // 目標地址  
                 System.out.println("請求: " + httpPost.getRequestLine());  
                // 構造最簡單的字符串數據  
                 StringEntity reqEntity = new StringEntity("userName=abin&passWord=varyall");  
                // 設置類型  
                 reqEntity.setContentType("application/x-www-form-urlencoded");  
                // 設置請求的數據  
                 httpPost.setEntity(reqEntity);  
                 httpPost.setHeader("lee", "lee");
                // 執行  
                 HttpResponse response = httpClient.execute(httpPost);  
                 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(!httpPost.isAborted()){
              httpPost.abort();
             }
             httpClient.getConnectionManager().shutdown();
            }
           }
          }



          //servlet配置
            <servlet>
                       <servlet-name>HttpClientPostProxyServlet</servlet-name>
                       <servlet-class>com.abin.lee.servlet.HttpClientPostProxyServlet</servlet-class>
                   </servlet>
                   <servlet-mapping>
                       <servlet-name>HttpClientPostProxyServlet</servlet-name>
                       <url-pattern>/HttpClientPostProxyServlet</url-pattern>
                   </servlet-mapping>




          我這里的IP和端口不一定能用喲,自己找能用的!!代碼是100%沒問題的,經過生產環境測試的喲!!!

          posted on 2013-04-18 17:45 abin 閱讀(1165) 評論(1)  編輯  收藏 所屬分類: httpClient

          Feedback

          # re: HttpClient Post代理訪問 2013-08-14 22:50 foxbase
          請問你的代碼如何運行啊,多謝了!  回復  更多評論
            

          主站蜘蛛池模板: 抚顺市| 三江| 武清区| 大新县| 广州市| 隆尧县| 沙田区| 古蔺县| 淳化县| 永兴县| 吴川市| 汽车| 牟定县| 万山特区| 胶南市| 滕州市| 龙里县| 旺苍县| 申扎县| 赤城县| 麟游县| 凤翔县| 吴川市| 恩施市| 龙海市| 万荣县| 扎赉特旗| 观塘区| 平南县| 盖州市| 喀什市| 全椒县| 连山| 信丰县| 玉溪市| 台南市| 松原市| 公安县| 平度市| 德江县| 车险|