远程访问接口get和post方法。

引用的包

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version>
</dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.2</version>
</dependency>

代码

package com.bingo.common.utils;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;/*** HTTP接口工具类* <code>{@link HttpUtils}</code>** DONE : 调用http接口工具类** @author shenlu*/
public class HttpUtils {private static Logger log = LoggerFactory.getLogger(HttpUtils.class);/*** httpget调用http接口* @param url* @param jsonStr* @param t* @param <T>* @return* @throws IOException* @throws IllegalAccessException* @throws InstantiationException*/public static<T> T httpGet(String url, String jsonStr,Class<T> t)throws IOException, IllegalAccessException, InstantiationException {HttpResponse response = null;JSONObject jsonObject = null;T instance = t.newInstance();String result="";try {if(url==null||"".equals(url)){throw new Exception("接口调用接口方法不能为空!");}//创建httpClient实例CloseableHttpClient httpClient = HttpClients.createDefault();//创建实例方法HttpGet httpget = new HttpGet(url);httpget.addHeader("Content-Type", "text/plain;charset=UTF-8");response = httpClient.execute(httpget);if(response.getStatusLine().getStatusCode()==200){//如果状态码为200,就是正常返回result=EntityUtils.toString(response.getEntity(),"UTF-8");}jsonObject =JSON.parseObject(result);if(instance instanceof JSONObject) {return (T) jsonObject;}T resultBean = (T) JSONObject.parseObject(jsonObject.toString(), t);return resultBean;} catch (ConnectException ce) {log.error(url+"接口 --server connection timed out:{}",ce);ce.printStackTrace();} catch (Exception e) {log.error(url+"--接口异常--",e);e.printStackTrace();}return t.newInstance();}/**** @param url* @param jsonStr* @param t* @param <T>* @throws IOException*/public static<T> T  httpPost(String url, String jsonStr,Class<T> t) throws IOException, IllegalAccessException, InstantiationException {JSONObject jsonObject = null;HttpResponse response = null;//创建httpClient实例CloseableHttpClient httpClient = HttpClients.createDefault();T instance = t.newInstance();try {if(url==null||"".equals(url)){throw new Exception("接口调用接口方法不能为空!");}//创建实例方法HttpPost httppost = new HttpPost(url);httppost.addHeader("Content-Type", "application/json;charset=UTF-8");//设置连接超时时间和数据获取超时时间--单位:msRequestConfig requestConfig = RequestConfig.custom()  .setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(5000).build();httppost.setConfig(requestConfig);//设置http request body请求体if (null != jsonStr) {//解决中文乱码问题StringEntity myEntity = new StringEntity(jsonStr, "UTF-8");httppost.setEntity(myEntity); }response = httpClient.execute(httppost);String result=EntityUtils.toString(response.getEntity(),"UTF-8");log.info("返回结果:"+result);//得到返回的字符串jsonObject =JSON.parseObject(result);if(instance instanceof JSONObject) {return (T) jsonObject;}T resultBean = (T) JSONObject.parseObject(jsonObject.toString(), t);return resultBean;} catch (ConnectException ce) {log.error(url+"接口 --server connection timed out:{}",ce);ce.printStackTrace();} catch (Exception e) {log.error(url+"--接口异常--",e);e.printStackTrace();}finally{httpClient.close();}return t.newInstance();}/**** @param urlStr* @param map* @param t* @param <T>* @return* @throws IOException* @throws IllegalAccessException* @throws InstantiationException*/public static<T> T  httpFormDataPost(String urlStr, Map<String,String> map, Class<T> t) throws IllegalAccessException, InstantiationException {JSONObject jsonObject = null;T instance = t.newInstance();String result="";// 每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。String BOUNDARY = "----------HV2ymHFg03ehbqgZCaKO6jyH";HttpURLConnection conn = null;try {if(urlStr==null||"".equals(urlStr)){throw new Exception("接口调用接口方法不能为空!");}URL url=new URL(urlStr);conn = (HttpURLConnection)url.openConnection();conn.setConnectTimeout(5000);conn.setReadTimeout(30000);conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);conn.setRequestMethod("POST");conn.setRequestProperty("Connection", "Keep-Alive");conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);// 头String boundary = BOUNDARY;// 传输内容StringBuffer contentBody = new StringBuffer("--" + BOUNDARY);// 尾String endBoundary = "\r\n--" + boundary + "--\r\n";OutputStream out = conn.getOutputStream();// 1. 处理文字形式的POST请求for (Map.Entry<String, String> entry : map.entrySet()) {contentBody.append("\r\n").append("Content-Disposition: form-data; name=\"").append(entry.getKey() + "\"").append("\r\n").append("\r\n").append(entry.getValue()).append("\r\n").append("--").append(boundary);}String boundaryMessage1 = contentBody.toString();out.write(boundaryMessage1.getBytes("utf-8"));out.write("------------HV2ymHFg03ehbqgZCaKO6jyH--\r\n".getBytes("UTF-8"));// 3. 写结尾out.write(endBoundary.getBytes("utf-8"));out.flush();out.close();// 读取返回数据StringBuffer strBuf = new StringBuffer();BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;while ((line = reader.readLine()) != null) {strBuf.append(line).append("\n");}result = strBuf.toString();log.info("返回结果:"+result);reader.close();reader = null;jsonObject =JSON.parseObject(result);if(instance instanceof JSONObject) {return (T) jsonObject;}T resultBean = (T) JSONObject.parseObject(jsonObject.toString(), t);return resultBean;} catch (ConnectException ce) {log.error(urlStr+"接口 --server connection timed out:{}",ce);ce.printStackTrace();} catch (Exception e) {log.error(urlStr+"--接口异常--",e);e.printStackTrace();} finally {if (conn != null) {conn.disconnect();conn = null;}}return t.newInstance();}/*** 上传多媒体* @param urlStr* @param file* @param fileitem* @param t* @param <T>* @return* @throws IllegalAccessException* @throws InstantiationException*/public static<T> T postformUpload(String urlStr, File file, FileItem fileitem,Class<T> t) throws IllegalAccessException, InstantiationException{JSONObject jsonObject = null;T instance = t.newInstance();String result="";HttpURLConnection conn = null;String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符try {URL url=new URL(urlStr);conn = (HttpURLConnection)url.openConnection();conn.setConnectTimeout(5000);conn.setReadTimeout(30000);conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);conn.setRequestMethod("POST");conn.setRequestProperty("Connection", "Keep-Alive");conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);OutputStream out = new DataOutputStream(conn.getOutputStream());if (fileitem != null|| file!=null) {String fileName = null;if(fileitem != null)fileName = fileitem.getName();if(file != null)fileName = file.getName();String contentType = "multipart/form-data";//match.getMimeType();StringBuffer strBuf = new StringBuffer();strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");strBuf.append("Content-Disposition: form-data; name=\"media\"; filename=\"" + fileName + "\"\r\n");strBuf.append("Content-Type:" + contentType + "\r\n\r\n");DataInputStream in = null;out.write(strBuf.toString().getBytes());if(fileitem != null)in = new DataInputStream(fileitem.getInputStream());if(file != null)in = new DataInputStream(new FileInputStream(file));int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);}in.close();}byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();out.write(endData);out.flush();out.close();// 读取返回数据StringBuffer strBuf = new StringBuffer();BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;while ((line = reader.readLine()) != null) {strBuf.append(line).append("\n");}result = strBuf.toString();reader.close();reader = null;jsonObject =JSON.parseObject(result);if(instance instanceof JSONObject) {return (T) jsonObject;}T resultBean = (T) JSONObject.parseObject(jsonObject.toString(), t);return resultBean;} catch (ConnectException ce) {log.error(urlStr+"接口 --server connection timed out:{}",ce);ce.printStackTrace();} catch (Exception e) {log.error(urlStr+"--接口异常--",e);e.printStackTrace();} finally {if (conn != null) {conn.disconnect();conn = null;}}return t.newInstance();}
}

http访问接口post和get方法类相关推荐

  1. 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )

    文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...

  2. SpringData核心数据访问接口--PagingAndSortingRepository

    PagingAndSortingRepository继承自CrudRepository接口,所以除了拥有CrudReposirory的功能外,他还增加了排序和分页查询的功能. 创建一个Maven项目, ...

  3. Java 8:声明接口中的私有方法和受保护的方法

    引入Java 8时,我们可以在接口中使用默认方法. 此功能的主要驱动程序是允许扩展接口,同时保留对旧接口版本的向后兼容性. 一个示例是在现有Collection类中引入stream()方法. 有时,当 ...

  4. 第四章 Spring.Net 如何管理您的类___统一资源访问接口

    在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...

  5. Java 编程问题:七、Java 反射类、接口、构造器、方法和字段

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括涉及 Java 反射 ...

  6. 面向对象 详解笔记 方法 类 对象 封装 继承 重写 多态 接口

    文章目录 面向过程&面向对象 面向过程 面向对象 什么是面向对象 回顾方法及加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范就o ...

  7. 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。

    设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...

  8. Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类

    Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...

  9. 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。 (2)设计四个类分

    代码 /*第二题:利用接口做参数,写个计算器,能完成加减乘除运算.(1)定义一个接口Compute含有一个方法int computer(int n, int m).(2)设计四个类分别实现此接口,完成 ...

最新文章

  1. ubuntu pip
  2. 1.4 Java创建一个学生类
  3. 1073 多选题常见计分法 (20 分)
  4. Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(一)
  5. 安全,从写第一行代码开始!
  6. 一种类型安全的Java HTTP客户端库Retrofit
  7. 排球记分员计分程序(三)————设计文档的编写及构架概要设计
  8. JavaCV 第一个JavaCV程序
  9. java设计模式案例及使用
  10. Uint 和 int 的区别
  11. ftp文件下载工具,三个非常好使的ftp文件下载工具
  12. 极光推送报错time_to_live value should be a non-negative integertime_to_live value should be a non-negativ
  13. 如何搭建一个属于自己的博客网站?(小白教程)
  14. 实时系统vxWorks - 动态库、静态库建立及调用
  15. 计算机二级柏林是第几套,2019年计算机二级Office考试内容及时间安排(内附两套原题库)...
  16. 新的 OpenWrt RCE 漏洞曝光,影响数百万台网络设备
  17. 如何创建一个Windows软件
  18. 互联网乱弹之360的云存储
  19. ITU-R 建议书下载网址
  20. 浅谈:智能化变电站在线监测系统

热门文章

  1. python常用函数有哪些
  2. RTD2173 USB-C Type-C/ DP 1.4 to HDMI 2.1 8K设计方案|替代RTD2173芯片|GSV6201可完全替代兼容 RTD2173
  3. 趣头条多账号 | 短视频批量伪原创
  4. 初识webpack与webpack环境搭建
  5. Oracle远程连接数据库显示无监听程序
  6. 无刷直流电机MATLAB仿真,基于有感无感两种方式 无刷直流电机霍尔换相建模
  7. Jenkins+Allure测试报告+飞书机器人发送通知
  8. pdf 生成文件工具类
  9. 学习Java虚拟机的正确的姿势?
  10. 【安卓-tio】安卓集成t-io