http访问接口post和get方法类
远程访问接口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方法类相关推荐
- 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...
- SpringData核心数据访问接口--PagingAndSortingRepository
PagingAndSortingRepository继承自CrudRepository接口,所以除了拥有CrudReposirory的功能外,他还增加了排序和分页查询的功能. 创建一个Maven项目, ...
- Java 8:声明接口中的私有方法和受保护的方法
引入Java 8时,我们可以在接口中使用默认方法. 此功能的主要驱动程序是允许扩展接口,同时保留对旧接口版本的向后兼容性. 一个示例是在现有Collection类中引入stream()方法. 有时,当 ...
- 第四章 Spring.Net 如何管理您的类___统一资源访问接口
在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...
- Java 编程问题:七、Java 反射类、接口、构造器、方法和字段
原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括涉及 Java 反射 ...
- 面向对象 详解笔记 方法 类 对象 封装 继承 重写 多态 接口
文章目录 面向过程&面向对象 面向过程 面向对象 什么是面向对象 回顾方法及加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范就o ...
- 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。
设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...
- Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类
Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...
- 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。 (2)设计四个类分
代码 /*第二题:利用接口做参数,写个计算器,能完成加减乘除运算.(1)定义一个接口Compute含有一个方法int computer(int n, int m).(2)设计四个类分别实现此接口,完成 ...
最新文章
- ubuntu pip
- 1.4 Java创建一个学生类
- 1073 多选题常见计分法 (20 分)
- Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(一)
- 安全,从写第一行代码开始!
- 一种类型安全的Java HTTP客户端库Retrofit
- 排球记分员计分程序(三)————设计文档的编写及构架概要设计
- JavaCV 第一个JavaCV程序
- java设计模式案例及使用
- Uint 和 int 的区别
- ftp文件下载工具,三个非常好使的ftp文件下载工具
- 极光推送报错time_to_live value should be a non-negative integertime_to_live value should be a non-negativ
- 如何搭建一个属于自己的博客网站?(小白教程)
- 实时系统vxWorks - 动态库、静态库建立及调用
- 计算机二级柏林是第几套,2019年计算机二级Office考试内容及时间安排(内附两套原题库)...
- 新的 OpenWrt RCE 漏洞曝光,影响数百万台网络设备
- 如何创建一个Windows软件
- 互联网乱弹之360的云存储
- ITU-R 建议书下载网址
- 浅谈:智能化变电站在线监测系统
热门文章
- python常用函数有哪些
- RTD2173 USB-C Type-C/ DP 1.4 to HDMI 2.1 8K设计方案|替代RTD2173芯片|GSV6201可完全替代兼容 RTD2173
- 趣头条多账号 | 短视频批量伪原创
- 初识webpack与webpack环境搭建
- Oracle远程连接数据库显示无监听程序
- 无刷直流电机MATLAB仿真,基于有感无感两种方式 无刷直流电机霍尔换相建模
- Jenkins+Allure测试报告+飞书机器人发送通知
- pdf 生成文件工具类
- 学习Java虚拟机的正确的姿势?
- 【安卓-tio】安卓集成t-io