java 常見幾種傳送http請求案例
<span style="font-family: Arial, Helvetica, sans-serif;">import java.io.BufferedReader;</span>
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.io.InputStreamReader;
-
import java.io.OutputStreamWriter;
-
import java.io.UnsupportedEncodingException;
-
import java.net.HttpURLConnection;
-
import java.net.Socket;
-
import java.net.URL;
-
import java.net.URLConnection;
-
import java.net.URLEncoder;
-
import java.util.ArrayList;
-
import java.util.HashMap;
-
import java.util.Iterator;
-
import java.util.List;
-
import java.util.Map;
-
import java.util.Map.Entry;
-
import org.apache.http.HttpResponse;
-
import org.apache.http.NameValuePair;
-
import org.apache.http.client.HttpClient;
-
import org.apache.http.client.entity.UrlEncodedFormEntity;
-
import org.apache.http.client.methods.HttpGet;
-
import org.apache.http.client.methods.HttpPost;
-
import org.apache.http.impl.client.DefaultHttpClient;
-
import org.apache.http.message.BasicNameValuePair;
-
/**
-
* @Description:傳送http請求幫助類
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:25:32
-
*/
-
public class HttpClientHelper {
-
/**
-
* @Description:使用HttpURLConnection傳送post請求
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:26:07
-
*/
-
public static String sendPost(String urlParam, Map<String, Object> params, String charset) {
-
StringBuffer resultBuffer = null;
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> e : params.entrySet()) {
-
sbParams.append(e.getKey());
-
sbParams.append("=");
-
sbParams.append(e.getValue());
-
sbParams.append("&");
-
}
-
}
-
HttpURLConnection con = null;
-
OutputStreamWriter osw = null;
-
BufferedReader br = null;
-
// 傳送請求
-
try {
-
URL url = new URL(urlParam);
-
con = (HttpURLConnection) url.openConnection();
-
con.setRequestMethod("POST");
-
con.setDoOutput(true);
-
con.setDoInput(true);
-
con.setUseCaches(false);
-
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-
if (sbParams != null && sbParams.length() > 0) {
-
osw = new OutputStreamWriter(con.getOutputStream(), charset);
-
osw.write(sbParams.substring(0, sbParams.length() - 1));
-
osw.flush();
-
}
-
// 讀取返回內容
-
resultBuffer = new StringBuffer();
-
int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));
-
if (contentLength > 0) {
-
br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
-
String temp;
-
while ((temp = br.readLine()) != null) {
-
resultBuffer.append(temp);
-
}
-
}
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (osw != null) {
-
try {
-
osw.close();
-
} catch (IOException e) {
-
osw = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (con != null) {
-
con.disconnect();
-
con = null;
-
}
-
}
-
}
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (con != null) {
-
con.disconnect();
-
con = null;
-
}
-
}
-
}
-
}
-
return resultBuffer.toString();
-
}
-
/**
-
* @Description:使用URLConnection傳送post
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:26:52
-
*/
-
public static String sendPost2(String urlParam, Map<String, Object> params, String charset) {
-
StringBuffer resultBuffer = null;
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> e : params.entrySet()) {
-
sbParams.append(e.getKey());
-
sbParams.append("=");
-
sbParams.append(e.getValue());
-
sbParams.append("&");
-
}
-
}
-
URLConnection con = null;
-
OutputStreamWriter osw = null;
-
BufferedReader br = null;
-
try {
-
URL realUrl = new URL(urlParam);
-
// 開啟和URL之間的連線
-
con = realUrl.openConnection();
-
// 設定通用的請求屬性
-
con.setRequestProperty("accept", "*/*");
-
con.setRequestProperty("connection", "Keep-Alive");
-
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-
con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-
// 傳送POST請求必須設定如下兩行
-
con.setDoOutput(true);
-
con.setDoInput(true);
-
// 獲取URLConnection物件對應的輸出流
-
osw = new OutputStreamWriter(con.getOutputStream(), charset);
-
if (sbParams != null && sbParams.length() > 0) {
-
// 傳送請求引數
-
osw.write(sbParams.substring(0, sbParams.length() - 1));
-
// flush輸出流的緩衝
-
osw.flush();
-
}
-
// 定義BufferedReader輸入流來讀取URL的響應
-
resultBuffer = new StringBuffer();
-
int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));
-
if (contentLength > 0) {
-
br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
-
String temp;
-
while ((temp = br.readLine()) != null) {
-
resultBuffer.append(temp);
-
}
-
}
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (osw != null) {
-
try {
-
osw.close();
-
} catch (IOException e) {
-
osw = null;
-
throw new RuntimeException(e);
-
}
-
}
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
return resultBuffer.toString();
-
}
-
/**
-
* @Description:傳送get請求儲存下載檔案
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:27:29
-
*/
-
public static void sendGetAndSaveFile(String urlParam, Map<String, Object> params, String fileSavePath) {
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> entry : params.entrySet()) {
-
sbParams.append(entry.getKey());
-
sbParams.append("=");
-
sbParams.append(entry.getValue());
-
sbParams.append("&");
-
}
-
}
-
HttpURLConnection con = null;
-
BufferedReader br = null;
-
FileOutputStream os = null;
-
try {
-
URL url = null;
-
if (sbParams != null && sbParams.length() > 0) {
-
url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
-
} else {
-
url = new URL(urlParam);
-
}
-
con = (HttpURLConnection) url.openConnection();
-
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-
con.connect();
-
InputStream is = con.getInputStream();
-
os = new FileOutputStream(fileSavePath);
-
byte buf[] = new byte[1024];
-
int count = 0;
-
while ((count = is.read(buf)) != -1) {
-
os.write(buf, 0, count);
-
}
-
os.flush();
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (os != null) {
-
try {
-
os.close();
-
} catch (IOException e) {
-
os = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (con != null) {
-
con.disconnect();
-
con = null;
-
}
-
}
-
}
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (con != null) {
-
con.disconnect();
-
con = null;
-
}
-
}
-
}
-
}
-
}
-
/**
-
* @Description:使用HttpURLConnection傳送get請求
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:27:29
-
*/
-
public static String sendGet(String urlParam, Map<String, Object> params, String charset) {
-
StringBuffer resultBuffer = null;
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> entry : params.entrySet()) {
-
sbParams.append(entry.getKey());
-
sbParams.append("=");
-
sbParams.append(entry.getValue());
-
sbParams.append("&");
-
}
-
}
-
HttpURLConnection con = null;
-
BufferedReader br = null;
-
try {
-
URL url = null;
-
if (sbParams != null && sbParams.length() > 0) {
-
url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
-
} else {
-
url = new URL(urlParam);
-
}
-
con = (HttpURLConnection) url.openConnection();
-
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-
con.connect();
-
resultBuffer = new StringBuffer();
-
br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
-
String temp;
-
while ((temp = br.readLine()) != null) {
-
resultBuffer.append(temp);
-
}
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (con != null) {
-
con.disconnect();
-
con = null;
-
}
-
}
-
}
-
}
-
return resultBuffer.toString();
-
}
-
/**
-
* @Description:使用URLConnection傳送get請求
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:27:58
-
*/
-
public static String sendGet2(String urlParam, Map<String, Object> params, String charset) {
-
StringBuffer resultBuffer = null;
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> entry : params.entrySet()) {
-
sbParams.append(entry.getKey());
-
sbParams.append("=");
-
sbParams.append(entry.getValue());
-
sbParams.append("&");
-
}
-
}
-
BufferedReader br = null;
-
try {
-
URL url = null;
-
if (sbParams != null && sbParams.length() > 0) {
-
url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
-
} else {
-
url = new URL(urlParam);
-
}
-
URLConnection con = url.openConnection();
-
// 設定請求屬性
-
con.setRequestProperty("accept", "*/*");
-
con.setRequestProperty("connection", "Keep-Alive");
-
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-
con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-
// 建立連線
-
con.connect();
-
resultBuffer = new StringBuffer();
-
br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
-
String temp;
-
while ((temp = br.readLine()) != null) {
-
resultBuffer.append(temp);
-
}
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
return resultBuffer.toString();
-
}
-
/**
-
* @Description:使用HttpClient傳送post請求
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:28:23
-
*/
-
public static String httpClientPost(String urlParam, Map<String, Object> params, String charset) {
-
StringBuffer resultBuffer = null;
-
HttpClient client = new DefaultHttpClient();
-
HttpPost httpPost = new HttpPost(urlParam);
-
// 構建請求引數
-
List<NameValuePair> list = new ArrayList<NameValuePair>();
-
Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();
-
while (iterator.hasNext()) {
-
Entry<String, Object> elem = iterator.next();
-
list.add(new BasicNameValuePair(elem.getKey(), String.valueOf(elem.getValue())));
-
}
-
BufferedReader br = null;
-
try {
-
if (list.size() > 0) {
-
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
-
httpPost.setEntity(entity);
-
}
-
HttpResponse response = client.execute(httpPost);
-
// 讀取伺服器響應資料
-
resultBuffer = new StringBuffer();
-
br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
String temp;
-
while ((temp = br.readLine()) != null) {
-
resultBuffer.append(temp);
-
}
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
return resultBuffer.toString();
-
}
-
/**
-
* @Description:使用HttpClient傳送get請求
-
* @author:liuyc
-
* @time:2016年5月17日 下午3:28:56
-
*/
-
public static String httpClientGet(String urlParam, Map<String, Object> params, String charset) {
-
StringBuffer resultBuffer = null;
-
HttpClient client = new DefaultHttpClient();
-
BufferedReader br = null;
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> entry : params.entrySet()) {
-
sbParams.append(entry.getKey());
-
sbParams.append("=");
-
try {
-
sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), charset));
-
} catch (UnsupportedEncodingException e) {
-
throw new RuntimeException(e);
-
}
-
sbParams.append("&");
-
}
-
}
-
if (sbParams != null && sbParams.length() > 0) {
-
urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);
-
}
-
HttpGet httpGet = new HttpGet(urlParam);
-
try {
-
HttpResponse response = client.execute(httpGet);
-
// 讀取伺服器響應資料
-
br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
String temp;
-
resultBuffer = new StringBuffer();
-
while ((temp = br.readLine()) != null) {
-
resultBuffer.append(temp);
-
}
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (br != null) {
-
try {
-
br.close();
-
} catch (IOException e) {
-
br = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
return resultBuffer.toString();
-
}
-
/**
-
* @Description:使用socket傳送post請求
-
* @author:liuyc
-
* @time:2016年5月18日 上午9:26:22
-
*/
-
public static String sendSocketPost(String urlParam, Map<String, Object> params, String charset) {
-
String result = "";
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> entry : params.entrySet()) {
-
sbParams.append(entry.getKey());
-
sbParams.append("=");
-
sbParams.append(entry.getValue());
-
sbParams.append("&");
-
}
-
}
-
Socket socket = null;
-
OutputStreamWriter osw = null;
-
InputStream is = null;
-
try {
-
URL url = new URL(urlParam);
-
String host = url.getHost();
-
int port = url.getPort();
-
if (-1 == port) {
-
port = 80;
-
}
-
String path = url.getPath();
-
socket = new Socket(host, port);
-
StringBuffer sb = new StringBuffer();
-
sb.append("POST " + path + " HTTP/1.1\r\n");
-
sb.append("Host: " + host + "\r\n");
-
sb.append("Connection: Keep-Alive\r\n");
-
sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");
-
sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");
-
// 這裡一個回車換行,表示訊息頭寫完,不然伺服器會繼續等待
-
sb.append("\r\n");
-
if (sbParams != null && sbParams.length() > 0) {
-
sb.append(sbParams.substring(0, sbParams.length() - 1));
-
}
-
osw = new OutputStreamWriter(socket.getOutputStream());
-
osw.write(sb.toString());
-
osw.flush();
-
is = socket.getInputStream();
-
String line = null;
-
// 伺服器響應體資料長度
-
int contentLength = 0;
-
// 讀取http響應頭部資訊
-
do {
-
line = readLine(is, 0, charset);
-
if (line.startsWith("Content-Length")) {
-
// 拿到響應體內容長度
-
contentLength = Integer.parseInt(line.split(":")[1].trim());
-
}
-
// 如果遇到了一個單獨的回車換行,則表示請求頭結束
-
} while (!line.equals("\r\n"));
-
// 讀取出響應體資料(就是你要的資料)
-
result = readLine(is, contentLength, charset);
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (osw != null) {
-
try {
-
osw.close();
-
} catch (IOException e) {
-
osw = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (socket != null) {
-
try {
-
socket.close();
-
} catch (IOException e) {
-
socket = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
}
-
if (is != null) {
-
try {
-
is.close();
-
} catch (IOException e) {
-
is = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (socket != null) {
-
try {
-
socket.close();
-
} catch (IOException e) {
-
socket = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
}
-
}
-
return result;
-
}
-
/**
-
* @Description:使用socket傳送get請求
-
* @author:liuyc
-
* @time:2016年5月18日 上午9:27:18
-
*/
-
public static String sendSocketGet(String urlParam, Map<String, Object> params, String charset) {
-
String result = "";
-
// 構建請求引數
-
StringBuffer sbParams = new StringBuffer();
-
if (params != null && params.size() > 0) {
-
for (Entry<String, Object> entry : params.entrySet()) {
-
sbParams.append(entry.getKey());
-
sbParams.append("=");
-
sbParams.append(entry.getValue());
-
sbParams.append("&");
-
}
-
}
-
Socket socket = null;
-
OutputStreamWriter osw = null;
-
InputStream is = null;
-
try {
-
URL url = new URL(urlParam);
-
String host = url.getHost();
-
int port = url.getPort();
-
if (-1 == port) {
-
port = 80;
-
}
-
String path = url.getPath();
-
socket = new Socket(host, port);
-
StringBuffer sb = new StringBuffer();
-
sb.append("GET " + path + " HTTP/1.1\r\n");
-
sb.append("Host: " + host + "\r\n");
-
sb.append("Connection: Keep-Alive\r\n");
-
sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");
-
sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");
-
// 這裡一個回車換行,表示訊息頭寫完,不然伺服器會繼續等待
-
sb.append("\r\n");
-
if (sbParams != null && sbParams.length() > 0) {
-
sb.append(sbParams.substring(0, sbParams.length() - 1));
-
}
-
osw = new OutputStreamWriter(socket.getOutputStream());
-
osw.write(sb.toString());
-
osw.flush();
-
is = socket.getInputStream();
-
String line = null;
-
// 伺服器響應體資料長度
-
int contentLength = 0;
-
// 讀取http響應頭部資訊
-
do {
-
line = readLine(is, 0, charset);
-
if (line.startsWith("Content-Length")) {
-
// 拿到響應體內容長度
-
contentLength = Integer.parseInt(line.split(":")[1].trim());
-
}
-
// 如果遇到了一個單獨的回車換行,則表示請求頭結束
-
} while (!line.equals("\r\n"));
-
// 讀取出響應體資料(就是你要的資料)
-
result = readLine(is, contentLength, charset);
-
} catch (Exception e) {
-
throw new RuntimeException(e);
-
} finally {
-
if (osw != null) {
-
try {
-
osw.close();
-
} catch (IOException e) {
-
osw = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (socket != null) {
-
try {
-
socket.close();
-
} catch (IOException e) {
-
socket = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
}
-
if (is != null) {
-
try {
-
is.close();
-
} catch (IOException e) {
-
is = null;
-
throw new RuntimeException(e);
-
} finally {
-
if (socket != null) {
-
try {
-
socket.close();
-
} catch (IOException e) {
-
socket = null;
-
throw new RuntimeException(e);
-
}
-
}
-
}
-
}
-
}
-
return result;
-
}
-
/**
-
* @Description:讀取一行資料,contentLe內容長度為0時,讀取響應頭資訊,不為0時讀正文
-
* @time:2016年5月17日 下午6:11:07
-
*/
-
private static String readLine(InputStream is, int contentLength, String charset) throws IOException {
-
List<Byte> lineByte = new ArrayList<Byte>();
-
byte tempByte;
-
int cumsum = 0;
-
if (contentLength != 0) {
-
do {
-
tempByte = (byte) is.read();
-
lineByte.add(Byte.valueOf(tempByte));
-
cumsum++;
-
} while (cumsum < contentLength);// cumsum等於contentLength表示已讀完
-
} else {
-
do {
-
tempByte = (byte) is.read();
-
lineByte.add(Byte.valueOf(tempByte));
-
} while (tempByte != 10);// 換行符的ascii碼值為10
-
}
-
byte[] resutlBytes = new byte[lineByte.size()];
-
for (int i = 0; i < lineByte.size(); i++) {
-
resutlBytes[i] = (lineByte.get(i)).byteValue();
-
}
-
return new String(resutlBytes, charset);
-
}
-
}
以上4種分別可傳送get和post請求的方法,第1種:HttpURLConnection、第2種:URLConnection、第3種:HttpClient、第4種:Socket,朋友們要注意的是,使用第3種HttpClient時需要依賴於三個jar包,分別是:apache-httpcomponents-httpclient.jar、commons-logging-1.0.4.jar、httpcore-4.1.1.jar。好了就到這裡吧,有問題記得留言哦