场景:做开发很久了,每次进行http请求都要去找依赖包,非常不爽,所以直接自己搞一个简易的;当然论稳定性,和适用性肯定没有那些千锤百炼的第三方高,不过谁让我有强迫症呢,只要有自己的东西,就不想用别人的了,哪怕比我好
import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.Map;import java.util.Set;/** * http请求 * * @author taihei * */public class MyHttpReq { /** * http请求 * * @param uri * @param method * 请求方式(get/post)默认get 可为null * @param params * 参数 可为null * @param charSet * 默认 utf8 可为 null * @return * 若请求失败,则返回以 "错误:"为开头的字符串 */ public static String httpReq(String uri, String method, Mapparams, String charSet) { if (null == uri || uri.replace(" ", "").length() < 12 || !uri.startsWith("http://")) {//一个合法的网址至少为12位(需以http开头) return "错误:URI非法"; } // 判断是否有指定请求方式 如果没有指定请求方式 则默认get请求 if (null == method || method.replace("", "").length() < 3) { method = "get"; } if (null == charSet || charSet.replace(" ", "").length() < 3) {// 最短的编码是gbk // 3位 charSet = "utf8"; } method = method.toUpperCase(); if (method.equalsIgnoreCase("get")) { // 对参数进行处理 if (null != params && params.size() > 0) { Set ks = params.keySet(); StringBuilder sb = new StringBuilder(); for (String key : ks) { try { sb.append(key + "=" + URLEncoder.encode(params.get(key).toString(), charSet) + "&");//内容用url编码 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } String pj = sb.substring(0, sb.length() - 1); if (pj.length() > 0) { if (uri.contains("?")) { uri = uri + "&" + pj; } else { uri = uri + "?" + pj; } } } try { URL url = new URL(uri); // 打开连接 HttpURLConnection是URLConnection的子类 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //默认返回值格式为json urlConnection.setRequestProperty("Accept", "application/json"); if (200 == urlConnection.getResponseCode()) { // 得到输入流 InputStream is = urlConnection.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while (-1 != (len = is.read(buffer))) { baos.write(buffer, 0, len); baos.flush(); } urlConnection.disconnect();// 数据读取完毕关闭流 return baos.toString("utf-8"); } else { return "错误:网络异常"; } } catch (IOException e) { e.printStackTrace(); } } if (method.equalsIgnoreCase("post")) { try { URL url = new URL(uri); // 打开连接 HttpURLConnection是URLConnection的子类 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod(method); // conn.setConnectTimeout(10000);//连接超时 单位毫秒 // conn.setReadTimeout(2000);//读取超时 单位毫秒 // 发送POST请求必须设置如下两行 urlConnection.setDoOutput(true); urlConnection.setDoInput(true);// urlConnection.setRequestProperty("Accept", "application/xhtml+xml");//xml格式返回值 //默认返回值格式为json urlConnection.setRequestProperty("Accept", "application/json"); urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 如果需要发送数据 if (null != params && params.size() > 0) { // 获取URLConnection对象对应的输出流 PrintWriter printWriter = new PrintWriter(urlConnection.getOutputStream()); // 发送请求参数 printWriter.write(params.toString().replaceAll("[{|}]", "")); // flush输出流的缓冲 printWriter.flush(); } if (200 == urlConnection.getResponseCode()) { // 得到输入流 InputStream is = urlConnection.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while (-1 != (len = is.read(buffer))) { baos.write(buffer, 0, len); baos.flush(); } urlConnection.disconnect();// 数据读取完毕关闭流 return baos.toString("utf-8"); } else { return "错误:网络异常"; } } catch (IOException e) { e.printStackTrace(); } } return "错误:请求失败"; }}