- <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。