java中的常見幾種發(fā)送http請求實例
更新時間:2024年11月08日 09:14:20 作者:北極熊不在北極
在Java編程中,發(fā)送HTTP請求是一個常見需求,常用的方法有四種:HttpURLConnection、URLConnection、HttpClient以及Socket,其中,使用HttpClient方式時,需要添加額外的庫支持
java常見幾種發(fā)送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:發(fā)送http請求幫助類 * @author:liuyc * @time:2016年5月17日 下午3:25:32 */ public class HttpClientHelper { /** * @Description:使用HttpURLConnection發(fā)送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; // 構(gòu)建請求參數(shù) 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; // 發(fā)送請求 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(); } // 讀取返回內(nèi)容 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發(fā)送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; // 構(gòu)建請求參數(shù) 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(); // 設(shè)置通用的請求屬性 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)"); // 發(fā)送POST請求必須設(shè)置如下兩行 con.setDoOutput(true); con.setDoInput(true); // 獲取URLConnection對象對應的輸出流 osw = new OutputStreamWriter(con.getOutputStream(), charset); if (sbParams != null && sbParams.length() > 0) { // 發(fā)送請求參數(shù) 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:發(fā)送get請求保存下載文件 * @author:liuyc * @time:2016年5月17日 下午3:27:29 */ public static void sendGetAndSaveFile(String urlParam, Map<String, Object> params, String fileSavePath) { // 構(gòu)建請求參數(shù) 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發(fā)送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; // 構(gòu)建請求參數(shù) 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發(fā)送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; // 構(gòu)建請求參數(shù) 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(); // 設(shè)置請求屬性 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發(fā)送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); // 構(gòu)建請求參數(shù) 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); // 讀取服務(wù)器響應數(shù)據(jù) 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發(fā)送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; // 構(gòu)建請求參數(shù) 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); // 讀取服務(wù)器響應數(shù)據(jù) 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發(fā)送post請求 * @author:liuyc * @time:2016年5月18日 上午9:26:22 */ public static String sendSocketPost(String urlParam, Map<String, Object> params, String charset) { String result = ""; // 構(gòu)建請求參數(shù) 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"); // 這里一個回車換行,表示消息頭寫完,不然服務(wù)器會繼續(xù)等待 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; // 服務(wù)器響應體數(shù)據(jù)長度 int contentLength = 0; // 讀取http響應頭部信息 do { line = readLine(is, 0, charset); if (line.startsWith("Content-Length")) { // 拿到響應體內(nèi)容長度 contentLength = Integer.parseInt(line.split(":")[1].trim()); } // 如果遇到了一個單獨的回車換行,則表示請求頭結(jié)束 } while (!line.equals("\r\n")); // 讀取出響應體數(shù)據(jù)(就是你要的數(shù)據(jù)) 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發(fā)送get請求 * @author:liuyc * @time:2016年5月18日 上午9:27:18 */ public static String sendSocketGet(String urlParam, Map<String, Object> params, String charset) { String result = ""; // 構(gòu)建請求參數(shù) 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"); // 這里一個回車換行,表示消息頭寫完,不然服務(wù)器會繼續(xù)等待 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; // 服務(wù)器響應體數(shù)據(jù)長度 int contentLength = 0; // 讀取http響應頭部信息 do { line = readLine(is, 0, charset); if (line.startsWith("Content-Length")) { // 拿到響應體內(nèi)容長度 contentLength = Integer.parseInt(line.split(":")[1].trim()); } // 如果遇到了一個單獨的回車換行,則表示請求頭結(jié)束 } while (!line.equals("\r\n")); // 讀取出響應體數(shù)據(jù)(就是你要的數(shù)據(jù)) 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:讀取一行數(shù)據(jù),contentLe內(nèi)容長度為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種分別可發(fā)送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。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用MyBatis時的幾種傳參規(guī)范示例
使用Mybatis作為持久層框架時,對于數(shù)據(jù)庫的增刪改查等操作都需要參數(shù)的傳遞,本文就詳細的介紹了一下SpringBoot使用MyBatis時的幾種傳參規(guī)范示例,感興趣的可以了解一下2022-02-02Springboot實例講解實現(xiàn)寵物醫(yī)院管理系統(tǒng)流程
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Springboot實現(xiàn)寵物醫(yī)院綜合管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-06-06Spring中使用騰訊云發(fā)送短信驗證碼的實現(xiàn)示例
本文主要介紹了Spring?中?使用騰訊云發(fā)送短信驗證碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03