全局變量
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
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
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();
}
}
}
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
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
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;
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";
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();
}
}
}
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();
}
}
}
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();
}
}
}
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();
}
}
}
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();
}
}
}
}