Java发送http请求,与RestTemplate功能相同RestTemplate方式发送http请求。
1.maven
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.6.0</version>
</dependency>
2.HttpUtil
package com.infoview.base.util;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 发送Http请求
*/
public class HttpUtil {
private static final Logger log = LoggerFactory.getLogger(HttpUtil.class);
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public static final MediaType XWWWFORMURLENCODED = MediaType
.parse("application/x-www-form-urlencoded; charset=utf-8");
/**
* 发送post请求
*
* @param url
* @param body
* @return
*/
public static String postBody(String url, RequestBody body) {
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).post(body).build();
try {
return httpClient.newCall(request).execute().body().string();
} catch (IOException e) {
log.error("HttpUtil postBody error", e);
}
return null;
}
/**
* 发送需求检查响应成功的post
*/
public static String post(String url, Object params) {
return post(url, params, true);
}
/**
* 发送Post 请求
*
* @param url
* @param params
* @param checkSuc 是否响检查应成功
* @return
*/
public static String post(String url, Object params, boolean checkSuc) {
OkHttpClient okHttpClient = new OkHttpClient();
String str = JsonUtil.objToJsonStr(params);
log.info("postJsonParams:" + str);
RequestBody requestBody = RequestBody.create(JSON, str);
Request request = new Request.Builder().url(url).post(requestBody).build();
try {
Response response = okHttpClient.newCall(request).execute();
if (checkSuc) {
if (response.isSuccessful()) {
return response.body().string();
}
} else {
return response.body().string();
}
} catch (IOException e) {
log.error("HttpUtil post error", e);
}
return null;
}
/*
*将map 拼接成 name=val&name1=val1
*/
public static String queryParams(Map<String, Object> params) {
if (params == null) {
return null;
}
StringBuffer param = new StringBuffer();
for (String key : params.keySet()) {
if (param.length() == 0) {
// param.append("?");
} else {
param.append("&");
}
try {
param.append(key).append("=").append(URLEncoder.encode(params.get(key).toString(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return param.toString();
}
/**
* 发送get请求
*
* @param url 请求地址
* @return
*/
public static String get(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (IOException e) {
log.error("HttpUtil get error", e);
}
return null;
}
/**
* 发送get请求
*
* @param url 请求地址
* @param params 设置参数
* @return
*/
public static String get(String url, Map<String, Object> params) {
String paramsStr = queryParams(params);
if (paramsStr != null) {
url = url + "?" + paramsStr;
}
return get(url);
}
/**
* 发送post请求
*
* @param url 请求地址
* @param params 设置参数
* @param headerMap 自定义头部
* @return
*/
public static String post(String url, Map<String, Object> params, Map<String, Object> headerMap) {
return post(url,params,headerMap,JSON);
}
public static String post(String url, Map<String, Object> params, Map<String, Object> headerMap,MediaType mediaType) {
Request.Builder builder = new Request.Builder();
if (headerMap != null && headerMap.size() > 0) {
for (String key : headerMap.keySet()) {
builder.addHeader(key, headerMap.get(key).toString());
}
}
RequestBody requestBody = null;
if (mediaType.equals(JSON)){
String paramsStr = JsonUtil.objToJsonStr(params);
requestBody = RequestBody.create(JSON, paramsStr);
}else{
String str = queryParams((Map<String, Object>)params);
requestBody = RequestBody.create(XWWWFORMURLENCODED, str);
}
Request request = builder.url(url).post(requestBody).build();
try {
OkHttpClient okHttpClient = new OkHttpClient();
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
System.out.println("post fail:" + response.body().string());
}
} catch (IOException e) {
log.error("post fail.err:url -> {},msg" , url, e);
}
return null;
}
/**
* 发送get请求
*
* @param url 请求地址
* @param params 设置参数
* @param headerMap 自定义头部
* @return
*/
public static String get(String url, Map<String, Object> params, Map<String, Object> headerMap) {
OkHttpClient client = new OkHttpClient();
Request.Builder builder = new Request.Builder();
if (headerMap != null && headerMap.size() > 0) {
for (String key : headerMap.keySet()) {
builder.addHeader(key, headerMap.get(key).toString());
}
}
String paramsStr = queryParams(params);
if (paramsStr != null) {
url = url + "?" + paramsStr;
}
// System.out.println("header:"+headerMap);
// System.out.println("url:"+url);
Request request = builder.url(url).build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
System.out.println("get fail:" + response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 上传文件
*
* @param url
* @param paramMap
* @return
*/
public static String uploadFile(String url, HashMap paramMap) {
return cn.hutool.http.HttpUtil.post(url, paramMap);
}
/**
* 加密Post请求
*
* @param url
* @param params
* @return
*/
public static Object encryptPost(String url, Object params) {
OkHttpClient okHttpClient = new OkHttpClient();
String paramStr = JsonUtil.objToJsonStr(params);
RequestBody requestBody = RequestBody.create(XWWWFORMURLENCODED, "reqdata=" + paramStr);
Long crtime = System.currentTimeMillis() / 1000;
String xToken = EncryptUtil.encrypt(paramStr + crtime);
Request request = new Request.Builder().url(url).addHeader("X-Token", xToken).addHeader("X-Time", crtime + "")
.post(requestBody).build();
try {
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
Map<String, Object> ret = JsonUtil.jsonToMap(response.body().string());
return ret.get("data");
}
} catch (IOException e) {
log.error("encryptPost error", e);
}
return null;
}
/**
* 将响应map字符转成Map对象
*
* @param str
* @return
*/
public static Map<String, Object> RepDataHandler(String str) {
if (StringUtil.isEmpty(str))
return null;
Map<String, Object> repData = JsonUtil.jsonToMap(str);
if (OtherUtil.isNull(repData))
return null;
return (HashMap<String, Object>) repData.get("data");
}
/**
* 获取响应的字符串
*
* @param str
* @return
*/
public static String RepStringHandler(String str) {
if (StringUtil.isEmpty(str))
return null;
Map<String, Object> repData = JsonUtil.jsonToMap(str);
if (OtherUtil.isNull(repData))
return null;
return repData.get("data").toString();
}
/**
* 将响应list字符转成list对象
*
* @param str
* @return
*/
public static List<Map<String, Object>> RepListDataHandler(String str) {
if (StringUtil.isEmpty(str))
return null;
Map<String, Object> repData = JsonUtil.jsonToMap(str);
if (OtherUtil.isNull(repData))
return null;
return (List<Map<String, Object>>) repData.get("data");
}
}