vlambda博客
学习文章列表

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-ee040be542c0 httpConn.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-ee040be542c0 httpConn.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
// 设置连接请求方式 httpConn.setRequestMethod("POST"); // 设置连接主机服务器超时时间:15000毫秒 httpConn.setConnectTimeout(15000); // 设置读取主机服务器返回数据超时时间:60000毫秒 httpConn.setReadTimeout(60000); // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true httpConn.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); }}