http工具類

全局變量

private static final Integer CONNECT_TIMEOUT = 20000; // 連接超時時間
private static final Integer READ_TIMEOUT = 20000; // 讀取超時時間
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0";
private static final String CHARSET = "utf-8";
private static final String GET = "GET";
private static final String POST = "POST";
private static final String BOUNDARY = "#";
private static final String PREFIX = "--";
private static final String NEWLINE = "\r\n";

GET

/**
	 * get請求
	 * @param url 請求url
	 * @return
	 * @throws Exception
	 */
public static String get(String url) throws Exception {
    StringBuffer sb = null;
    OutputStreamWriter outWriter = null;
    BufferedReader reader = null;
    try {
        // 創建一個網絡連接對象
        URL u = new URL(url);
        // 打開連接
        HttpURLConnection conn = (HttpURLConnection) u.openConnection();

        // 設置連接參數
        conn.setRequestMethod(GET);// 提交方式
        conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
        conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
        conn.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);

        // 讀取返回的結果
        reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
        String result = "";
        sb = new StringBuffer();
        while ((result = reader.readLine()) != null) {
            sb.append(result);
        }
        return sb.toString();
    } finally {
        if (null != reader) {
            reader.close();
        }
        if (null != outWriter) {
            outWriter.close();
        }
    }
}

POST

/**
	 * post請求
	 * @param url 請求地址
	 * @param jsonString 請求數據(jsonString)
	 * @throws Exception
	 */
public static String post(String url, String jsonString) throws Exception {
    StringBuffer sb = null;
    OutputStreamWriter outWriter = null;
    BufferedReader reader = null;
    try {
        // 創建一個網絡連接對象
        URL u = new URL(url);
        // 打開連接
        HttpURLConnection conn = (HttpURLConnection) u.openConnection();

        // 設置連接參數
        conn.setDoOutput(true);// 允許輸出 
        conn.setRequestMethod(POST);// 提交方式
        conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
        conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
        conn.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);

        conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
        conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
        conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

        // 設置請求參數
        if (null != jsonString && !"".equals(jsonString.trim())) {
            outWriter = new OutputStreamWriter(conn.getOutputStream(), CHARSET);
            // 發送請求參數
            outWriter.write(jsonString);
            // flush輸出流的緩衝
            outWriter.flush();
        }

        // 讀取返回的結果
        reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
        String result = "";
        sb = new StringBuffer();
        while ((result = reader.readLine()) != null) {
            sb.append(result);
        }
        return sb.toString();
    } finally {
        if (null != reader) {
            reader.close();
        }
        if (null != outWriter) {
            outWriter.close();
        }
    }
}

/**
	 * post請求
	 * @param url 請求地址
	 * @param params 請求數據
	 * @throws Exception
	 */
public static String post(String url, Map<String, Object> params) throws Exception {
    StringBuffer sb = null;
    OutputStreamWriter outWriter = null;
    BufferedReader reader = null;
    try {
        // 創建一個網絡連接對象
        URL u = new URL(url);
        // 打開連接
        HttpURLConnection conn = (HttpURLConnection) u.openConnection();

        // 設置連接參數
        conn.setDoInput(true);// 允許輸入 下載
        conn.setDoOutput(true);// 允許輸出 上傳
        conn.setRequestMethod(POST);// 提交方式
        conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
        conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
        conn.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);

        conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
        conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
        conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

        // 設置請求參數
        if (null != params && !params.isEmpty()) {
            StringBuffer buffer = new StringBuffer();
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                buffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
            buffer.deleteCharAt(buffer.length() - 1);

            outWriter = new OutputStreamWriter(conn.getOutputStream(), CHARSET);
            // 發送請求參數
            outWriter.write(buffer.toString());
            // flush輸出流的緩衝
            outWriter.flush();
        }

        // 讀取返回的結果
        reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
        String result = "";
        sb = new StringBuffer();
        while ((result = reader.readLine()) != null) {
            sb.append(result);
        }
        return sb.toString();
    } finally {
        if (null != reader) {
            reader.close();
        }
        if (null != outWriter) {
            outWriter.close();
        }
    }
}

UPLOAD

/**
	 * 文件上傳
	 * @param url url地址
	 * @param fileFormName 文件表單名
	 * @param file 文件
	 * @param params 其它參數
	 * @return
	 * @throws Exception
	 */
public static String upload(String url, String fileFormName, File file, Map<String, Object> params)
    throws Exception {
    ByteArrayOutputStream baos = null;
    InputStream in = null;
    DataOutputStream dos = null;
    FileInputStream fileIn = null;
    try {
        // 創建一個網絡連接對象
        URL u = new URL(url);
        // 打開連接
        HttpURLConnection conn = (HttpURLConnection) u.openConnection();

        // 設置連接參數
        conn.setDoInput(true);// 允許輸入 下載
        conn.setDoOutput(true);// 允許輸出 上傳
        conn.setRequestMethod(GET);// 提交方式
        conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
        conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

        conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
        conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
        conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

        dos = new DataOutputStream(conn.getOutputStream());
        // 設置請求參數
        if (null != params && !params.isEmpty()) {
            StringBuffer buffer = new StringBuffer();
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                buffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
                dos.writeBytes(PREFIX + BOUNDARY + NEWLINE); // 像請求體中寫分割線,就是前綴+分界線+換行
                dos.writeBytes("Content-Disposition: form-data; " + "name=\"" + entry.getKey() + "\"" + NEWLINE); // 拼接參數名,格式就是Content-Disposition:
                // form-data;
                // name="key"
                // 其中key就是當前循環的鍵值對的鍵,別忘了最後的換行
                dos.writeBytes(NEWLINE); // 空行,一定不能少,鍵和值之間有一個固定的空行
                dos.writeBytes(URLEncoder.encode(entry.getValue().toString(), CHARSET));
                dos.writeBytes(NEWLINE); // 換行
            }
        }
        if (null != file) {
            dos.writeBytes(PREFIX + BOUNDARY + NEWLINE);// 像請求體中寫分割線,就是前綴+分界線+換行
            String fileName = file.getName();
            // 格式是:Content-Disposition: form-data; name="請求參數名";
            // filename="文件名"
            dos.writeBytes("Content-Disposition: form-data; " + "name=\"" + fileFormName + "\"" + "; filename=\""
                           + fileName + "\"" + NEWLINE);
            dos.writeBytes(NEWLINE);

            fileIn = new FileInputStream(file);
            byte[] b = new byte[1024];
            int r = 0;
            while ((r = fileIn.read(b)) != -1) {
                dos.write(b, 0, r);
            }
            dos.writeBytes(NEWLINE); 
        }
        dos.writeBytes(PREFIX + BOUNDARY + PREFIX + NEWLINE); // 最後的分割線,與前面的有點不一樣是前綴+分界線+前綴+換行,最後多了一個前綴
        dos.flush();

        // 讀取返回的結果
        in = conn.getInputStream();
        byte[] buffer = new byte[1024];
        StringBuffer sb = new StringBuffer();
        while ((in.read(buffer, 0, 1024)) != -1) {
            sb.append(buffer);
        }
        return sb.toString();
    } finally {
        if (null != in) {
            in.close();
        }
        if (null != baos) {
            baos.close();
        }
        if (null != fileIn) {
            fileIn.close();
        }
        if (null != dos) {
            dos.close();
        }
    }
}

DOWNLOAD

/**
	 * 文件下載
	 * @param url url地址
	 * @return
	 * @throws Exception
	 */
public static byte[] download(String url) throws Exception {
    OutputStreamWriter writer = null;
    ByteArrayOutputStream baos = null;
    InputStream in = null;
    try {
        // 創建一個網絡連接對象
        URL u = new URL(url);
        // 打開連接
        HttpURLConnection conn = (HttpURLConnection) u.openConnection();

        // 設置連接參數
        conn.setRequestMethod(GET);// 提交方式
        conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
        conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間

        conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
        conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
        conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

        // 讀取返回的結果
        in = conn.getInputStream();
        byte[] buffer = new byte[1024];
        baos = new ByteArrayOutputStream();
        int r = 0;
        while ((r = in.read(buffer, 0, 1024)) != -1) {
            baos.write(buffer, 0, r);
        }
        return baos.toByteArray();
    } finally {
        if (null != writer) {
            baos.close();
        }
        if (null != in) {
            in.close();
        }
        if (null != baos) {
            baos.close();
        }
    }
}

完整工具類

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**
 * http工具類
 */
public class HttpUtil {

	private static final Integer CONNECT_TIMEOUT = 20000; // 連接超時時間
	private static final Integer READ_TIMEOUT = 20000; // 讀取超時時間
	private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0";
	private static final String CHARSET = "utf-8";
	private static final String GET = "GET";
	private static final String POST = "POST";
	private static final String BOUNDARY = "#";
	private static final String PREFIX = "--";
	private static final String NEWLINE = "\r\n";

	/**
	 * get請求
	 * @param url 請求url
	 * @return
	 * @throws Exception
	 */
	public static String get(String url) throws Exception {
		StringBuffer sb = null;
		OutputStreamWriter outWriter = null;
		BufferedReader reader = null;
		try {
			// 創建一個網絡連接對象
			URL u = new URL(url);
			// 打開連接
			HttpURLConnection conn = (HttpURLConnection) u.openConnection();

			// 設置連接參數
			conn.setRequestMethod(GET);// 提交方式
			conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
			conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
			conn.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);

			// 讀取返回的結果
			reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
			String result = "";
			sb = new StringBuffer();
			while ((result = reader.readLine()) != null) {
				sb.append(result);
			}
			return sb.toString();
		} finally {
			if (null != reader) {
				reader.close();
			}
			if (null != outWriter) {
				outWriter.close();
			}
		}
	}

	/**
	 * post請求
	 * @param url 請求地址
	 * @param jsonString 請求數據(jsonString)
	 * @throws Exception
	 */
	public static String post(String url, String jsonString) throws Exception {
		StringBuffer sb = null;
		OutputStreamWriter outWriter = null;
		BufferedReader reader = null;
		try {
			// 創建一個網絡連接對象
			URL u = new URL(url);
			// 打開連接
			HttpURLConnection conn = (HttpURLConnection) u.openConnection();

			// 設置連接參數
			conn.setDoOutput(true);// 允許輸出 
			conn.setRequestMethod(POST);// 提交方式
			conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
			conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
			conn.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);

			conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
			conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
			conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

			// 設置請求參數
			if (null != jsonString && !"".equals(jsonString.trim())) {
				outWriter = new OutputStreamWriter(conn.getOutputStream(), CHARSET);
				// 發送請求參數
				outWriter.write(jsonString);
				// flush輸出流的緩衝
				outWriter.flush();
			}

			// 讀取返回的結果
			reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
			String result = "";
			sb = new StringBuffer();
			while ((result = reader.readLine()) != null) {
				sb.append(result);
			}
			return sb.toString();
		} finally {
			if (null != reader) {
				reader.close();
			}
			if (null != outWriter) {
				outWriter.close();
			}
		}
	}

	/**
	 * post請求
	 * @param url 請求地址
	 * @param params 請求數據
	 * @throws Exception
	 */
	public static String post(String url, Map<String, Object> params) throws Exception {
		StringBuffer sb = null;
		OutputStreamWriter outWriter = null;
		BufferedReader reader = null;
		try {
			// 創建一個網絡連接對象
			URL u = new URL(url);
			// 打開連接
			HttpURLConnection conn = (HttpURLConnection) u.openConnection();

			// 設置連接參數
			conn.setDoInput(true);// 允許輸入 下載
			conn.setDoOutput(true);// 允許輸出 上傳
			conn.setRequestMethod(POST);// 提交方式
			conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
			conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
			conn.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);

			conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
			conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
			conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

			// 設置請求參數
			if (null != params && !params.isEmpty()) {
				StringBuffer buffer = new StringBuffer();
				for (Map.Entry<String, Object> entry : params.entrySet()) {
					buffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
				}
				buffer.deleteCharAt(buffer.length() - 1);

				outWriter = new OutputStreamWriter(conn.getOutputStream(), CHARSET);
				// 發送請求參數
				outWriter.write(buffer.toString());
				// flush輸出流的緩衝
				outWriter.flush();
			}

			// 讀取返回的結果
			reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
			String result = "";
			sb = new StringBuffer();
			while ((result = reader.readLine()) != null) {
				sb.append(result);
			}
			return sb.toString();
		} finally {
			if (null != reader) {
				reader.close();
			}
			if (null != outWriter) {
				outWriter.close();
			}
		}
	}

	/**
	 * 文件下載
	 * @param url url地址
	 * @return
	 * @throws Exception
	 */
	public static byte[] download(String url) throws Exception {
		OutputStreamWriter writer = null;
		ByteArrayOutputStream baos = null;
		InputStream in = null;
		try {
			// 創建一個網絡連接對象
			URL u = new URL(url);
			// 打開連接
			HttpURLConnection conn = (HttpURLConnection) u.openConnection();

			// 設置連接參數
			conn.setRequestMethod(GET);// 提交方式
			conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
			conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間

			conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
			conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
			conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

			// 讀取返回的結果
			in = conn.getInputStream();
			byte[] buffer = new byte[1024];
			baos = new ByteArrayOutputStream();
			int r = 0;
			while ((r = in.read(buffer, 0, 1024)) != -1) {
				baos.write(buffer, 0, r);
			}
			return baos.toByteArray();
		} finally {
			if (null != writer) {
				baos.close();
			}
			if (null != in) {
				in.close();
			}
			if (null != baos) {
				baos.close();
			}
		}
	}

	/**
	 * 文件上傳
	 * @param url url地址
	 * @param fileFormName 文件表單名
	 * @param file 文件
	 * @param params 其它參數
	 * @return
	 * @throws Exception
	 */
	public static String upload(String url, String fileFormName, File file, Map<String, Object> params)
			throws Exception {
		ByteArrayOutputStream baos = null;
		InputStream in = null;
		DataOutputStream dos = null;
		FileInputStream fileIn = null;
		try {
			// 創建一個網絡連接對象
			URL u = new URL(url);
			// 打開連接
			HttpURLConnection conn = (HttpURLConnection) u.openConnection();

			// 設置連接參數
			conn.setDoInput(true);// 允許輸入 下載
			conn.setDoOutput(true);// 允許輸出 上傳
			conn.setRequestMethod(GET);// 提交方式
			conn.setConnectTimeout(CONNECT_TIMEOUT);// 設置連接響應時間
			conn.setReadTimeout(READ_TIMEOUT);// 設置接後等待響應時間
			conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

			conn.setRequestProperty("accept", "*/*");// 代表發送端(客戶端)希望接受的數據類型
			conn.setRequestProperty("connection", "Keep-Alive");// 一次連接處理多個請求
			conn.setRequestProperty("user-agent", USER_AGENT);// 瀏覽器標識

			dos = new DataOutputStream(conn.getOutputStream());
			// 設置請求參數
			if (null != params && !params.isEmpty()) {
				StringBuffer buffer = new StringBuffer();
				for (Map.Entry<String, Object> entry : params.entrySet()) {
					buffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
					dos.writeBytes(PREFIX + BOUNDARY + NEWLINE); // 像請求體中寫分割線,就是前綴+分界線+換行
					dos.writeBytes("Content-Disposition: form-data; " + "name=\"" + entry.getKey() + "\"" + NEWLINE); // 拼接參數名,格式就是Content-Disposition:
																														// form-data;
																														// name="key"
																														// 其中key就是當前循環的鍵值對的鍵,別忘了最後的換行
					dos.writeBytes(NEWLINE); // 空行,一定不能少,鍵和值之間有一個固定的空行
					dos.writeBytes(URLEncoder.encode(entry.getValue().toString(), CHARSET));
					dos.writeBytes(NEWLINE); // 換行
				}
			}
			if (null != file) {
				dos.writeBytes(PREFIX + BOUNDARY + NEWLINE);// 像請求體中寫分割線,就是前綴+分界線+換行
				String fileName = file.getName();
				// 格式是:Content-Disposition: form-data; name="請求參數名";
				// filename="文件名"
				dos.writeBytes("Content-Disposition: form-data; " + "name=\"" + fileFormName + "\"" + "; filename=\""
						+ fileName + "\"" + NEWLINE);
				dos.writeBytes(NEWLINE);
				
				fileIn = new FileInputStream(file);
				byte[] b = new byte[1024];
				int r = 0;
				while ((r = fileIn.read(b)) != -1) {
					dos.write(b, 0, r);
				}
				dos.writeBytes(NEWLINE); 
			}
			dos.writeBytes(PREFIX + BOUNDARY + PREFIX + NEWLINE); // 最後的分割線,與前面的有點不一樣是前綴+分界線+前綴+換行,最後多了一個前綴
			dos.flush();

			// 讀取返回的結果
			in = conn.getInputStream();
			byte[] buffer = new byte[1024];
			StringBuffer sb = new StringBuffer();
			while ((in.read(buffer, 0, 1024)) != -1) {
				sb.append(buffer);
			}
			return sb.toString();
		} finally {
			if (null != in) {
				in.close();
			}
			if (null != baos) {
				baos.close();
			}
			if (null != fileIn) {
				fileIn.close();
			}
			if (null != dos) {
				dos.close();
			}
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章