1. 程式人生 > >java模擬http的Get/Post請求,並設定ip與port代理

java模擬http的Get/Post請求,並設定ip與port代理

1、因為很多公司的內網都設有代理,瀏覽器通過ip與port上網,而java程式碼模擬http get方式同樣需要外網代理;

2、Java實現http的Get/Post請求程式碼;

3、主要是設定HttpURLConnection請求頭裡面的屬性

比如Cookie、User-Agent(瀏覽器型別)等等。

:我就在網上找的一段Get/Post模擬請求程式碼,添加了下代理的配置,整合完成的。

package com.http;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import java.util.Random;

public abstract class HttpRequest {

	
	
	public static boolean proxyHost = false;
	public static boolean roxyPort  = false;
	public int port = 80;


	    public static void main(String[] args) {
	        // 如果不設定,只要代理IP和代理埠正確,此項不設定也可以
	        System.getProperties().setProperty("http.proxyHost", "10.22.40.32");
	        System.getProperties().setProperty("http.proxyPort", "8080");
	        sendGet(  "http://localhost:8080/book/admin/menu/getMenus.do",  "");
	    }

	    /**
	     * 向指定URL傳送GET方法的請求
	     * 
	     * @param url
	     *            傳送請求的URL
	     * @param param
	     *            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。
	     * @return URL 所代表遠端資源的響應結果
	     */
	    public static String sendGet(String url, String param) {
	        String result = "";
	        BufferedReader in = null;
	        try {
	            String urlNameString = url + "?" + param;
	            URL realUrl = new URL(urlNameString);
	            // 開啟和URL之間的連線
	            URLConnection connection = realUrl.openConnection();
	            // 設定通用的請求屬性
	            connection.setRequestProperty("accept", "*/*");
	            connection.setRequestProperty("connection", "Keep-Alive");
	            connection.setRequestProperty("user-agent",  "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; SCH-P709 Build/JDQ39) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");
	            // 建立實際的連線
	            connection.connect();
	            // 獲取所有響應頭欄位
	            Map<String, List<String>> map = connection.getHeaderFields();
	            // 遍歷所有的響應頭欄位
	            for (String key : map.keySet()) {
	                System.out.println(key + "--->" + map.get(key));
	            }
	            // 定義 BufferedReader輸入流來讀取URL的響應
	            in = new BufferedReader(new InputStreamReader(
	                    connection.getInputStream()));
	            String line;
	            while ((line = in.readLine()) != null) {
	                result += line;
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        // 使用finally塊來關閉輸入流
	        finally {
	            try {
	                if (in != null) {
	                    in.close();
	                }
	            } catch (Exception e2) {
	                e2.printStackTrace();
	            }
	        }
	        return result;
	    }

	    /**
	     * 向指定 URL 傳送POST方法的請求
	     * 
	     * @param url
	     *            傳送請求的 URL
	     * @param param
	     *            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。
	     * @return 所代表遠端資源的響應結果
	     */
	    public static String sendPost(String url, String param) {
	        PrintWriter out = null;
	        BufferedReader in = null;
	        String result = "";
	        try {
	            URL realUrl = new URL(url);
	            // 開啟和URL之間的連線
	            URLConnection conn = realUrl.openConnection();
	            // 設定通用的請求屬性
	            conn.setRequestProperty("accept", "*/*");
	            conn.setRequestProperty("connection", "Keep-Alive");
	            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; SCH-P709 Build/JDQ39) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");
	            // 傳送POST請求必須設定如下兩行
	            conn.setDoOutput(true);
	            conn.setDoInput(true);
	            // 獲取URLConnection物件對應的輸出流
	            out = new PrintWriter(conn.getOutputStream());
	            // 傳送請求引數
	            out.print(param);
	            // flush輸出流的緩衝
	            out.flush();
	            // 定義BufferedReader輸入流來讀取URL的響應
	            in = new BufferedReader(
	                    new InputStreamReader(conn.getInputStream()));
	            String line;
	            while ((line = in.readLine()) != null) {
	                result += line;
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        // 使用finally塊來關閉輸出流、輸入流
	        finally {
	            try {
	                if (out != null) {
	                    out.close();
	                }
	                if (in != null) {
	                    in.close();
	                }
	            } catch (IOException ex) {
	                ex.printStackTrace();
	            }
	        }
	        return result;
	    }
	
	
	
	
	
	private String reandomIpAddress(){
		return new Random().nextInt(254)+"."+new Random().nextInt(254)+"."+new Random().nextInt(254)+"."+new Random().nextInt(254);
	}
}