Java 原生态HTTP协议的网络编程封装类
从java的生态来讲,网络编程有很多的框架和解决手段,但无论哪种我们也应该熟知java原生态的网络编程,从网络搜索来看都较为参次不齐,达不到自己想要的干净,简练,所以啥也不说自己撸一把。
当然要想学好和读懂代码,那么你必须应该拥有java api 手册,毕竟有些类的使用和方法在java api 里说的明明白白,我就不具体解释类和方法的使用,你应该去看java api 文档,当然我也偶尔间看到一个网址提供了java 常用的 api 奉上 链接http://www.matools.com/api/java8
我使用的是idea 工具,啥也不说开始撸代码,并贴出源码
package util;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;/*** @author Mcally 2020年3月3日23:04:44* @deprecated java 原生态HTTP请求GET/POST方式*/public class HttpUtils {/*** 发送GET请求** @param url 连接地址* @param parameters 请求参数,Map类型。* @return 远程响应结果*/public static String doGet(String url, Map<String, String> parameters) {String result = "";BufferedReader br = null;// 读取响应输入流HttpURLConnection httpConn = null;try {// 编码请求参数String params = parseParame(parameters);String full_url = url + "?" + params;//System.out.println(full_url);// 创建URL对象URL connURL = new java.net.URL(full_url);// 打开URL连接httpConn = (HttpURLConnection) connURL.openConnection();// 设置通用属性httpConn.setRequestProperty("Accept", "*/*");httpConn.setRequestProperty("Connection", "Keep-Alive");httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");// 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0httpConn.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");// 建立实际的连接httpConn.connect();// 响应头部获取// Map<String, List<String>> headers = httpConn.getHeaderFields();// 遍历所有的响应头字段// for (String key : headers.keySet()) {// System.out.println(key + "\t:\t" + headers.get(key));// }// 定义BufferedReader输入流来读取URL的响应,并设置编码方式br = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));String line;// 读取返回的内容while ((line = br.readLine()) != null) {result += line;}} catch (Exception e) {e.printStackTrace();} finally {try {if (br != null) {br.close();}} catch (IOException ex) {ex.printStackTrace();}// 断开与远程地址url的连接httpConn.disconnect();}return result;}/*** 发送POST请求** @param url 连接地址* @param parameters 请求参数,Map类型。* @return 远程响应结果*/public static String doPost(String url, Map<String, String> parameters) {String result = "";// 返回的结果BufferedReader in = null;// 读取响应输入流PrintWriter pw = null;HttpURLConnection httpConn = null;try {// 编码请求参数String params = parseParame(parameters);// 创建URL对象URL connURL = new URL(url);// 打开URL连接httpConn = (HttpURLConnection) connURL.openConnection();// 设置通用属性httpConn.setRequestProperty("Accept", "*/*");httpConn.setRequestProperty("Connection", "Keep-Alive");httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");// 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0httpConn.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");// 设置连接请求方式httpConn.setRequestMethod("POST");// 设置连接主机服务器超时时间:15000毫秒httpConn.setConnectTimeout(15000);// 设置读取主机服务器返回数据超时时间:60000毫秒httpConn.setReadTimeout(60000);// 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为truehttpConn.setDoOutput(true);// 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无httpConn.setDoInput(true);// 获取HttpURLConnection对象对应的输出流pw = new PrintWriter(httpConn.getOutputStream());// 发送请求参数pw.write(params);// System.out.println(params);// flush输出流的缓冲pw.flush();// 定义BufferedReader输入流来读取URL的响应,设置编码方式in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));String line;// 读取返回的内容while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {e.printStackTrace();} finally {try {if (pw != null) {pw.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}// 断开与远程地址url的连接httpConn.disconnect();}return result;}/*** 编码请求参数** @param parameters 请求的参数Map* @return 返回编译后的请求参数* @throws UnsupportedEncodingException*/private static String parseParame(Map<String, String> parameters) throws UnsupportedEncodingException {StringBuffer sb = new StringBuffer();// 存储参数String params;if (parameters.size() == 1) {for (String name : parameters.keySet()) {sb.append(name).append("=").append(URLEncoder.encode(parameters.get(name),"UTF-8"));}params = sb.toString();} else {for (String name : parameters.keySet()) {sb.append(name).append("=").append(URLEncoder.encode(parameters.get(name),"UTF-8")).append("&");}String temp_params = sb.toString();//去掉最后一个字符params = temp_params.substring(0, temp_params.length() - 1);}return params;}/*** 主函数,测试请求** @param args*/public static void main(String[] args) {Map<String, String> parameters = new HashMap<String, String>();parameters.put("name", "Mcally");String result = doGet("http://www.baidu.com", parameters);System.out.println(result);}}
