okhttp:
依赖:
com.squareup.okhttp3
okhttp
3.14.2
package com.ece.manager.web.entranceGuardHK.util;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.ece.manager.web.bluetoothLock.OkHttpUtils;
import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpUtil {
private static final String Authorization = "bearer e45f6d0f-a863-425a-8d80-bd8821771046";
private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8");
private static final byte[] LOCKER = new byte[0];
private static OkHttpUtil instance;
private OkHttpClient okHttpClient;
private OkHttpUtil() {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//10秒连接超时
.writeTimeout(10, TimeUnit.SECONDS)//10m秒写入超时
.readTimeout(10, TimeUnit.SECONDS)//10秒读取超时
.build();
}
public static OkHttpUtil getInstance() {
if (instance == null) {
synchronized (LOCKER) {
if (instance == null) {
instance = new OkHttpUtil();
}
}
}
return instance;
}
/**
* 设置content-type
* @param type
* @return
*/
public MediaType getMediaType(String type){
if(!type.equals("")){
return MediaType.parse(type);//"application/x-www-form-urlencoded; charset=utf-8"
}
return MediaType.parse("application/json;charset=utf-8");
}
/**
* delete请求
* @param url
* @return
*/
public String doDelete(String url){
if (isBlankUrl(url)){
return null;
}
Request request = getRequestForDelete(url);
return commonRequest(request);
}
private Request getRequestForDelete(String url) {
Request request = new Request.Builder()
.addHeader("Authorization", Authorization)
.url(url)
.delete(null)
.build();
return request;
}
/**
* get请求 不带参数
* @param url
* @return
*/
public String doGet(String url){
if (isBlankUrl(url)){
return null;
}
Request request = getRequestForGet(url);
return commonRequest(request);
}
/**
* get请求 实现
* @param url
* @return
*/
private Request getRequestForGet(String url) {
Request request = new Request.Builder()
.addHeader("Authorization", Authorization)
.url(url)
.build();
return request;
}
/**
* get请求 带Map参数
* @param url
* @param params
* @return
*/
public String doGet(String url, Map params){
System.out.println("参数^-^:"+params.toString());
if (isBlankUrl(url)){
return null;
}
Request request = getRequestForGet(url, params);
return commonRequest(request);
}
/**
* get请求 实现
* @param url
* @param params
* @return
*/
private Request getRequestForGet(String url, Map params) {
Request request = new Request.Builder()
.addHeader("Authorization", Authorization)
.url(getUrlStringForGet(url, params))
.build();
return request;
}
/**
* post请求 参数为jsonStr
* @param url
* @param json
* @param type
* @return
*/
public String doPostJson(String url, String json,String type){
if (isBlankUrl(url)){
return null;
}
Request request = getRequestForPostJson(url, json,type);
return commonRequest(request);
}
/**
* 实现post请求
* @param url
* @param json
* @param type
* @return
*/
private Request getRequestForPostJson(String url, String json,String type) {
RequestBody body = RequestBody.create(getMediaType(type), json);
Request request = new Request.Builder()
.addHeader("Authorization", Authorization)
.url(url)
.post(body)
.build();
return request;
}
/**
* 新post请求 参数为map
* @param url
* @param params
* @return
*/
public String newDoPostForm(String url, Map params,String type){
System.out.println("参数^-^:"+params.toString());
if (isBlankUrl(url)) {
return null;
}
Request request = getRequestForPostJson(url, JSONObject.toJSONString(params),type);
return commonRequest(request);
}
public String newsDoPostForm(String url, Map params,String type){
if(params!=null){
System.out.println("参数^-^:"+params.toString());
}
if (isBlankUrl(url)) {
return null;
}
Request request = getRequestForPostJson(url, JSONObject.toJSONString(params),type);
return commonRequest(request);
}
/**
* post请求 参数为map
* @param url
* @param params
* @return
*/
public String doPostForm(String url, Map params){
if (isBlankUrl(url)) {
return null;
}
Request request = getRequestForPostForm(url, params);
return commonRequest(request);
}
/**
* 实现post请求
* @param url
* @param params
* @return
*/
private Request getRequestForPostForm(String url, Map params) {
if (params == null) {
params = new HashMap<>();
}
FormBody.Builder builder = new FormBody.Builder();
if (params != null && params.size() > 0) {
for (Map.Entry entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
}
RequestBody requestBody = builder.build();
Request request = new Request.Builder()
.addHeader("Authorization", Authorization)
.url(url)
.post(requestBody)
.build();
return request;
}
private Boolean isBlankUrl(String url){
if (StringUtils.isBlank(url)){
System.out.println("url是null");
return true;
}else{
return false;
}
}
/**
* 请求解析
* @param request
* @return
*/
private String commonRequest(Request request){
String re = "";
try {
Call call = okHttpClient.newCall(request);
Response response = call.execute();
if (response.isSuccessful()){
re = response.body().string();
System.out.println("请求^-^:"+request.url().toString()+" \r\n响应^-^:"+re);
}else {
System.out.println("请求失败 url:"+request.url().toString()+"\r\nmessage:"+response.message());
}
}catch (Exception e){
System.out.println("请求异常"+e);
}
return re;
}
/**
* get请求参数封装
* @param url
* @param params
* @return
*/
private String getUrlStringForGet(String url, Map params) {
int num = 0;
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append(url);
urlBuilder.append("?");
if (params != null && params.size() > 0) {
for (Map.Entry entry : params.entrySet()) {
try {
if(num == 0){
urlBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8"));
num = 1;
}else{
urlBuilder.append("&").append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
} catch (Exception e) {
urlBuilder.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
}
num = 0;
}
return urlBuilder.toString();
}
}
HttpClient:
jar包下载:
https://download.csdn.net/download/qq_43560721/12509637
package com.ece.manager.web.entranceGuardHK.util;
public class HttpClientResult {
/**
* 响应状态码
*/
private int code;
/**
* 响应数据
*/
private String content;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package com.ece.manager.web.entranceGuardHK.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
* Description: httpClient工具类
*
* @author JourWon
* @date Created on 2018年4月19日
*/
public class HttpClientUtils {
// 编码格式。发送编码格式统一用UTF-8
private static final String ENCODING = "UTF-8";
// 设置连接超时时间,单位毫秒。
private static final int CONNECT_TIMEOUT = 6000;
// 请求获取数据的超时时间(即响应时间),单位毫秒。
private static final int SOCKET_TIMEOUT = 6000;
/**
* 发送get请求;不带请求头和请求参数
*
* @param url 请求地址
* @return
* @throws Exception
*/
public static HttpClientResult doGet(String url) throws Exception {
return doGet(url, null, null);
}
/**
* 发送get请求;带请求参数
*
* @param url 请求地址
* @param params 请求参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doGet(String url, Map params) throws Exception {
return doGet(url, null, params);
}
/**
* 发送get请求;带请求头和请求参数
*
* @param url 请求地址
* @param headers 请求头集合
* @param params 请求参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doGet(String url, Map headers, Map params) throws Exception {
// 创建httpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建访问的地址
URIBuilder uriBuilder = new URIBuilder(url);
if (params != null) {
Set> entrySet = params.entrySet();
for (Entry entry : entrySet) {
uriBuilder.setParameter(entry.getKey(), entry.getValue());
}
}
// 创建http对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
/**
* setConnectTimeout:设置连接超时时间,单位毫秒。
* setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection
* 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
* setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
*/
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpGet.setConfig(requestConfig);
// 设置请求头
packageHeader(headers, httpGet);
// 创建httpResponse对象
CloseableHttpResponse httpResponse = null;
try {
// 执行请求并获得响应结果
return getHttpClientResult(httpResponse, httpClient, httpGet);
} finally {
// 释放资源
release(httpResponse, httpClient);
}
}
/**
* 发送post请求;不带请求头和请求参数
*
* @param url 请求地址
* @return
* @throws Exception
*/
public static HttpClientResult doPost(String url) throws Exception {
return doPost(url, null, null);
}
/**
* 发送post请求;带请求参数
*
* @param url 请求地址
* @param params 参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doPost(String url, Map params) throws Exception {
return doPost(url, null, params);
}
/**
* 发送post请求;带请求头和请求参数
*
* @param url 请求地址
* @param headers 请求头集合
* @param params 请求参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doPost(String url, Map headers, Map params) throws Exception {
// 创建httpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建http对象
HttpPost httpPost = new HttpPost(url);
/**
* setConnectTimeout:设置连接超时时间,单位毫秒。
* setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection
* 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
* setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
*/
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpPost.setConfig(requestConfig);
// 设置请求头
/*httpPost.setHeader("Cookie", "");
httpPost.setHeader("Connection", "keep-alive");
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Accept-Language", "zh-CN,zh;q=0.9");
httpPost.setHeader("Accept-Encoding", "gzip, deflate, br");
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");*/
packageHeader(headers, httpPost);
// 封装请求参数
packageParam(params, httpPost);
// 创建httpResponse对象
CloseableHttpResponse httpResponse = null;
try {
// 执行请求并获得响应结果
return getHttpClientResult(httpResponse, httpClient, httpPost);
} finally {
// 释放资源
release(httpResponse, httpClient);
}
}
/**
* 发送put请求;不带请求参数
*
* @param url 请求地址
* @param params 参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doPut(String url) throws Exception {
return doPut(url);
}
/**
* 发送put请求;带请求参数
*
* @param url 请求地址
* @param params 参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doPut(String url, Map params) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPut httpPut = new HttpPut(url);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpPut.setConfig(requestConfig);
packageParam(params, httpPut);
CloseableHttpResponse httpResponse = null;
try {
return getHttpClientResult(httpResponse, httpClient, httpPut);
} finally {
release(httpResponse, httpClient);
}
}
/**
* 发送delete请求;不带请求参数
*
* @param url 请求地址
* @param params 参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doDelete(String url) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpDelete httpDelete = new HttpDelete(url);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpDelete.setConfig(requestConfig);
CloseableHttpResponse httpResponse = null;
try {
return getHttpClientResult(httpResponse, httpClient, httpDelete);
} finally {
release(httpResponse, httpClient);
}
}
/**
* 发送delete请求;带请求参数
*
* @param url 请求地址
* @param params 参数集合
* @return
* @throws Exception
*/
public static HttpClientResult doDelete(String url, Map params) throws Exception {
if (params == null) {
params = new HashMap();
}
params.put("_method", "delete");
return doPost(url, params);
}
/**
* Description: 封装请求头
* @param params
* @param httpMethod
*/
public static void packageHeader(Map params, HttpRequestBase httpMethod) {
// 封装请求头
if (params != null) {
Set> entrySet = params.entrySet();
for (Entry entry : entrySet) {
// 设置到请求头到HttpRequestBase对象中
httpMethod.setHeader(entry.getKey(), entry.getValue());
}
}
}
/**
* Description: 封装请求参数
*
* @param params
* @param httpMethod
* @throws UnsupportedEncodingException
*/
public static void packageParam(Map params, HttpEntityEnclosingRequestBase httpMethod)
throws UnsupportedEncodingException {
// 封装请求参数
if (params != null) {
List nvps = new ArrayList();
Set> entrySet = params.entrySet();
for (Entry entry : entrySet) {
nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
// 设置到请求的http对象中
httpMethod.setEntity(new UrlEncodedFormEntity(nvps, ENCODING));
}
}
/**
* Description: 获得响应结果
*
* @param httpResponse
* @param httpClient
* @param httpMethod
* @return
* @throws Exception
*/
public static HttpClientResult getHttpClientResult(CloseableHttpResponse httpResponse,
CloseableHttpClient httpClient, HttpRequestBase httpMethod) throws Exception {
HttpClientResult http = new HttpClientResult();
// 执行请求
httpResponse = httpClient.execute(httpMethod);
String content = "";
// 获取返回结果
if (httpResponse != null && httpResponse.getStatusLine() != null) {
if (httpResponse.getEntity() != null) {
content = EntityUtils.toString(httpResponse.getEntity(), ENCODING);
}
http.setCode(httpResponse.getStatusLine().getStatusCode());
http.setContent(content);
return http;
}
http.setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
http.setContent(content);
return http;
}
/**
* Description: 释放资源
*
* @param httpResponse
* @param httpClient
* @throws IOException
*/
public static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException {
// 释放资源
if (httpResponse != null) {
httpResponse.close();
}
if (httpClient != null) {
httpClient.close();
}
}
}
HttpRequest:
依赖:
cn.hutool
hutool-all
5.3.5
/**
* 方法1:请求为map
*
* @param url 下行接口地址
* @param jsonStr 参数
* @return 返回为字符串
*/
public static String reqPostByMap(String url, Map params) {
System.out.println("------请求参数-----:\r\n"+params.toString());
String resultStr =
HttpRequest.post(url)
.header("Accept", "application/json")
.header("Content-Type", "application/json;charset=utf-8")
.header("Authorization", auth)
.body(JSONObject.toJSONString(params))
.execute().body();
System.out.println("------响应参数-----:\r\n" + resultStr);
return resultStr;
}
/**
* 方法2:请求和返回均为json字符串 纯json处理
*
* @param url 下行接口地址
* @param jsonStr 参数
* @return 返回为字符串
*/
public static String reqPostByStr(String url, String jsonStr) {
System.out.println("------请求参数-----:\r\n"+jsonStr);
String resultStr =
HttpRequest.post(url)
.header("Accept", "application/json")
.header("Content-Type", "application/json;charset=utf-8")
.header("Authorization", auth)
.body(jsonStr)
.execute().body();
System.out.println("------响应参数-----:\r\n" + resultStr);
return resultStr;
}