java实现http的GET/POST请求封装类-HttpRequest

  • 背景
  • 代码实现

背景

在开发钉钉应用和微信应用时,会经常在java服务端以Http的GET或POST方式请求钉钉平台或微信平台的接口,为了方便发起请求,同时避免引入其他的java包,本人自己编写了一个发送http请求的类,封装了常规的get和post操作,并且不依赖任何其他的jar包,很底层~,也很原生。

代码实现

代码如下:

package com.mesnac.util;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;/*** Http请求封装类,封装常用的Get,Post请求方法* @author 郑立兵**/
public class HttpRequest {/*** 向指定URL发送GET方法的请求* * @param url*            发送请求的URL* @param param*            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @return URL 所代表远程资源的响应结果*/public static String sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");// connection.setRequestProperty("Accept-Charset", "UTF-8");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段// for (String key : map.keySet()) {// System.out.println(key + "--->" + map.get(key));// }// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}byte[] bresult = result.getBytes();result = new String(bresult, "utf-8");} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定URL发送GET方法的请求* * @param url*            发送请求的URL* @param param*            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @param encoding*            设置响应信息的编码格式,如utf-8* @return URL 所代表远程资源的响应结果*/public static String sendGet(String url, String param, String encoding) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段// for (String key : map.keySet()) {// System.out.println(key + "--->" + map.get(key));// }// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}byte[] bresult = result.getBytes();result = new String(bresult, encoding);} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定 URL 发送POST方法的请求* * @param url*            发送请求的 URL* @param param*            请求参数,请求参数应该是Json格式字符串的形式。* @return 所代表远程资源的响应结果*/public static String sendPost(String url, String jsonData) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection con = realUrl.openConnection();HttpURLConnection conn = (HttpURLConnection) con;// 设置通用的请求属性conn.setRequestMethod("POST"); // 设置Post请求conn.setConnectTimeout(5 * 1000);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); // 设置内容类型// conn.setRequestProperty("Content-Length",// String.valueOf(param.length())); //设置长度// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 获取URLConnection对象对应的输出流out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));// 发送请求参数// out.print(param);out.write(jsonData);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}byte[] bresult = result.getBytes();result = new String(bresult, "utf-8");} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}public static String sendPost(String url, String jsonData, String encoding, String authorization, String postmanToken){PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection con = realUrl.openConnection();HttpURLConnection conn = (HttpURLConnection) con;// 设置通用的请求属性conn.setRequestMethod("POST"); // 设置Post请求conn.setConnectTimeout(5 * 1000);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); // 设置内容类型conn.setRequestProperty("authorization", authorization);conn.setRequestProperty("postman-token", postmanToken);// conn.setRequestProperty("Content-Length",// String.valueOf(param.length())); //设置长度// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 获取URLConnection对象对应的输出流out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), encoding));// 发送请求参数// out.print(param);out.write(jsonData);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}byte[] bresult = result.getBytes();result = new String(bresult, encoding);} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}/*** 向指定 URL 发送POST方法的请求* * @param url*            发送请求的 URL* @param jsonData*            请求参数,请求参数应该是Json格式字符串的形式。* @param encoding*            设置响应信息的编码格式,如utf-8* @return 所代表远程资源的响应结果*/public static String sendPost(String url, String jsonData, String encoding) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection con = realUrl.openConnection();HttpURLConnection conn = (HttpURLConnection) con;// 设置通用的请求属性conn.setRequestMethod("POST"); // 设置Post请求conn.setConnectTimeout(5 * 1000);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); // 设置内容类型// conn.setRequestProperty("Content-Length",// String.valueOf(param.length())); //设置长度// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 获取URLConnection对象对应的输出流out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), encoding));// 发送请求参数// out.print(param);out.write(jsonData);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}byte[] bresult = result.getBytes();result = new String(bresult, encoding);} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}/*** 上传媒体文件* @param url*               上传媒体文件的微信公众平台接口地址* @param file*                要上传的媒体文件对象* @return*               返回上传的响应结果,详情参看微信公众平台开发者接口文档*/public static String uploadPost(String url, File file) {DataOutputStream dos = null;FileInputStream fis = null;DataInputStream dis = null;BufferedReader in = null;String result = "";String end = "\r\n";String twoHyphens = "--"; // 用于拼接String boundary = "*****"; // 用于拼接 可自定义try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection con = realUrl.openConnection();HttpURLConnection conn = (HttpURLConnection) con;// 设置通用的请求属性conn.setRequestMethod("POST"); // 设置Post请求// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);conn.setConnectTimeout(5 * 1000);conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("Charset", "UTF-8");conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + boundary); // 设置内容类型// 获取URLConnection对象对应的输出流dos = new DataOutputStream(conn.getOutputStream());//1、写入媒体头部分StringBuilder sb = new StringBuilder();sb.append(twoHyphens).append(boundary).append(end);sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"").append(end);sb.append("Content-Type:application/octet-stream").append(end).append(end);byte[] head = sb.toString().getBytes("utf-8");dos.write(head);//2、写入媒体正文部分, 对文件进行传输fis = new FileInputStream(file);dis = new DataInputStream(fis);byte[] buffer = new byte[8192]; // 8Kint count = 0;while ((count = dis.read(buffer)) != -1) {dos.write(buffer, 0, count);}//3、写入媒体结尾部分。byte[] foot = (end + twoHyphens + boundary + twoHyphens + end).getBytes("utf-8");dos.write(foot);dos.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}byte[] bresult = result.getBytes();result = new String(bresult, "utf-8");} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (dos != null) {dos.close();}if (dis != null) {dis.close();}if (fis != null) {fis.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}
}

希望对各位有所帮助~

java实现http的GET/POST请求封装类-HttpRequest相关推荐

  1. C#实现http的GET/POST请求封装类-HttpRequest

    C#实现http的GET/POST请求封装类-HttpRequest 背景 代码实现 背景 在开发微信应用时,会经常在C#服务端以Http的GET或POST方式请求钉钉平台或微信平台的接口,为了方便发 ...

  2. java 基本类型封装类,Java 八种基本类型和基本类型封装类-九五小庞

    Java 八种基本类型和基本类型封装类-九五小庞 1.首先,八种基本数据类型分别是:int.short.float.double.long.boolean.byte.char: 它们的封装类分别是:I ...

  3. java 常见几种发送http请求案例

    java 常见几种发送http请求案例 直接换成CloseableHttpClient还不行,需要这样使用CloseableHttpClient httpClient = HttpClientBuil ...

  4. php http 类,php写的http请求封装类

    本文介绍一个php实现的http请求封装类,封装了三种post提交方法和一个request请求方法,并提供了调用示例,供大家学习参考. 在php编程调试时,经常需要模拟提交. 另外,在抓取一些页面时, ...

  5. Scala学习之 java.net.BindException: 无法指定被请求的地址: Service 'sparkDriver' failed

    在Scala本地运行时,出现无法指定被请求地址,通过朋友帮助终于解决问题` java.net.BindException: 无法指定被请求的地址: Service 'sparkDriver' fail ...

  6. java main 方法使用 HttpClients发送请求 不打印debug日志

    记录目的:java main 方法使用HttpClients发送请求不打印debug日志 记录背景: 使用java main方法测试接口响应时间 发现问题: 控制台打印巨多debug日志 解决方法: ...

  7. WEB HTTP:浏览器HTTP协议漫谈、请求对象Httprequest、响应对象HttpResponse、浏览器内部工作原理(待完善)

    0 系列目录 WEB请求处理 WEB请求处理一:浏览器请求发起处理 WEB请求处理二:Nginx请求反向代理 WEB请求处理三:Servlet容器请求处理 WEB请求处理四:Tomcat配置实践 WE ...

  8. 接口自动化框架(java)--2.接口用例POST请求,参数配置

    这套框架的报告是自己封装的 Post类型的接口通常有请求参数,请求参数也是json类型,所以需要写一个类将请求参数序列化成json对象 以常见的登录接口为例 新建一个package,和postPara ...

  9. java中http解析url,java url 编码(解析http请求汉语言地址 )

    java url 编码(解析http请求中文地址 ) 在近在做项目的过程中,由于客户那边服务器上提供的有很多中文结构目录.请求要的地址不能正常运行显示出来.下面来分享一下我对http协议处理请求中文的 ...

  10. Java异步执行多个HTTP请求的例子(需要apache http类库)

    直接上代码 package org.jivesoftware.spark.util;import java.io.IOException; import java.util.concurrent.Co ...

最新文章

  1. 记一次MyBatis的错误
  2. 数据库-优化-MYSQL数据库设计原则
  3. pythoneasyinstall安装第三方库,Python安装第三方库的3种方法
  4. readdirectorychangesw 链接错误 undeclared identifier 解决方法
  5. 仿造小红书页面代码html,jQuery仿小红书登录页,背景图垂直循环滚动登录页,向上循环滚动的动画,实现一张背景图片的无缝向上循环js滚动...
  6. 计算机毕业设计中用Java实现商场库存清单案例
  7. python基础之centos7源码安装python3
  8. 咸阳机场地下停车场如何收费,咸阳机场停车收费价格
  9. Vue3.0 + pdf.js 实现pdf预览
  10. Java视频特效处理(超全)/PC版美颜相机
  11. 石家庄规划建设智慧城市 三年后城市将大变样
  12. java中isolate时间_Flutter 92: 图解 Dart 单线程实现异步处理之 Isolate (一)
  13. 使用开源DocX 生成Word
  14. js读Json,JSON与字符串转化,Java读JSON
  15. 谷爱凌母亲 24 年前重磅采访:远见卓识的人,可以改变世界
  16. 第一次实验结论与总结
  17. 业务中台和数据中台的区别
  18. LINQ编程之LINQ to SQL
  19. 关于机器指令和微指令
  20. 扑克牌上四个花色人物的故事,及其代表意义

热门文章

  1. windos系统如何获得超级管理员权限
  2. 龙芯 python_在UOS20-龙芯(MIPS64EL)上安装 opencv-python
  3. 【100+ python基础入门-37】Python可变集合和不可变集合的构造方法和注意事项
  4. Matrix Concatenate 矩阵串联
  5. 计算机绘图教程简单,工程制图CAD计算机绘图指导教程
  6. win7系统配置时间服务器,与Internet时间服务器同步 设Win7精确时间
  7. RHEL7虚拟机实验快照
  8. python web flask 插件_Python WEB框架之Flask
  9. IntelliJ IDEA 之汉化包安装
  10. html6张拼图,拼图6张-好看的6宫格拼图大全-稿定设计