1. 程式人生 > >java寫post和get請求

java寫post和get請求

      有時候我們需要在伺服器端傳送一個post或get請求,這是我們就可以通過JDK中的URLConnection類實現

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

	/**
	 * 向指定URL傳送GET方法的請求
	 * 
	 * @param url
	 *            傳送請求的URL
	 * @param param
	 *            請求引數,請求引數格式是 name1=value1&name2=value2 的形式。
	 * @return result 所代表遠端資源的響應結果
	 */
	public static String sendGet(String url, String param) {
		StringBuffer result = new StringBuffer();
		URL realUrl = null;
		HttpURLConnection connection = null;
		BufferedReader in = null;
		String line = null;
		try {
			if (param != null && param.trim().length() > 0) {
				url = "?" + param;
			}
			realUrl = new URL(url);
			// 開啟和URL之間的連線
			connection = (HttpURLConnection) realUrl.openConnection();

			// 設定通用的請求屬性
			connection.setRequestMethod("GET");
			connection.setRequestProperty("accept", "*/*");
			// 設定保活
			connection.setRequestProperty("connection", "Keep-Alive");
			connection.setRequestProperty("Accept-Charset", "utf-8");
			connection.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");
			connection.setRequestProperty("user-agent",
					"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 設定連線主機超時(單位:毫秒)
			connection.setConnectTimeout(8000);
			// 設定從主機讀取資料超時(單位:毫秒)
			connection.setReadTimeout(30000);
			// 建立實際的連線
			connection.connect();
			// 定義 BufferedReader輸入流來讀取URL的響應
			in = new BufferedReader(new InputStreamReader(
					connection.getInputStream(), "utf-8"));
			// 讀取伺服器響應回來的位元組流
			while ((line = in.readLine()) != null) {
				result.append(line);
			}
		} catch (Exception e) {
			System.out.println("傳送GET請求出現異常!" + e);
			e.printStackTrace();
		}
		// 使用finally塊來關閉輸入流
		finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return result.toString();
	}

	/**
	 * 向指定 URL 傳送POST方法的請求
	 * 
	 * @param url
	 *            傳送請求的 URL
	 * @param param
	 *            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。
	 * @return 代表遠端資源的響應結果
	 */
	public static String sendPost(String url, String param) {
		StringBuffer result = new StringBuffer();
		URL realUrl = null;
		HttpURLConnection connection = null;
		PrintWriter out = null;
		BufferedReader in = null;
		String line = null;
		try {

			realUrl = new URL(url);
			// 開啟和URL之間的連線
			connection = (HttpURLConnection) realUrl.openConnection();

			// 設定通用的請求屬性
			connection.setRequestMethod("POST");
			connection.setRequestProperty("accept", "*/*");
			connection.setRequestProperty("connection", "Keep-Alive");
			connection.setRequestProperty("Accept-Charset", "utf-8");
			connection.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");
			connection.setRequestProperty("user-agent",
					"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 設定連線主機超時(單位:毫秒)
			connection.setConnectTimeout(8000);
			// 設定從主機讀取資料超時(單位:毫秒)
			connection.setReadTimeout(30000);
			// 傳送POST請求必須設定如下兩行
			// 設定是否向httpUrlConnection輸出,因為這個是post請求,引數要放在
			// http正文內,因此需要設為true, 預設情況下是false;
			connection.setDoOutput(true);
			// 設定是否從httpUrlConnection讀入,預設情況下是true;
			connection.setDoInput(true);
			// 獲取URLConnection物件對應的輸出流
			out = new PrintWriter(connection.getOutputStream());
			// 傳送請求引數
			out.print(param);
			// flush輸出流的緩衝
			out.flush();
			// 定義BufferedReader輸入流來讀取URL的響應
			in = new BufferedReader(new InputStreamReader(
					connection.getInputStream(), "utf-8"));
			// 讀取伺服器響應回來的位元組流
			while ((line = in.readLine()) != null) {
				result.append(line);
			}
		} catch (Exception e) {
			System.out.println("傳送 POST 請求出現異常!" + e);
			e.printStackTrace();
		}
		// 使用finally塊來關閉輸出流、輸入流
		finally {
			try {
				if (out != null) {
					out.close();
				}
				if (in != null) {
					in.close();
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		return result.toString();
	}

	public static void main(String[] args) {
		// 傳送 GET 請求
		String s = HttpUtils.sendGet("https://www.taobao.com/", "");
		System.out.println(s);

		// 傳送 POST 請求
		String sr = HttpUtils.sendPost("https://www.baidu.com/", "");
		System.out.println(sr);
		
	}
}