调用第三方接口也是我们开发经常遇到得,记录自己掉用第三方接口得过程
1:一般分为http和https两种情况,我目前只用了http
话不多说,首先我们加入maven依赖
org.jsoup
jsoup
1.11.3
2:接下来就是我们的工具类了,兼容http和https两种请求类型
package com.example.utils;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
/**
-
Http发送post请求工具,兼容http和https两种请求类型
/
public class HttpsUtils {
/*- 请求超时时间
*/
private static final int TIME_OUT = 120000;
/**
- Https请求
*/
private static final String HTTPS = “https”;
/**
- Content-Type
*/
private static final String CONTENT_TYPE = “Content-Type”;
/**
- 表单提交方式Content-Type
*/
private static final String FORM_TYPE = “application/x-www-form-urlencoded;charset=UTF-8”;
/**
- JSON提交方式Content-Type
*/
private static final String JSON_TYPE = “application/json;charset=UTF-8”;
/**
- 发送Get请求
- @param url 请求URL
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response get(String url) throws IOException {
return get(url, null);
}
/**
-
发送Get请求
-
@param url 请求URL
-
@param headers 请求头参数
-
@return HTTP响应对象
-
@throws IOException 程序异常时抛出,由调用者处理
*/
public static Response get(String url, Map<String, String> headers) throws IOException {
if (null == url || url.isEmpty()) {
throw new RuntimeException(“The request URL is blank.”);
}// 如果是Https请求
if (url.startsWith(HTTPS)) {
getTrust();
}
Connection connection = Jsoup.connect(url);
connection.method(Method.GET);
connection.timeout(TIME_OUT);
connection.ignoreHttpErrors(true);
connection.ignoreContentType(true);
connection.maxBodySize(0);if (null != headers) {
connection.headers(headers);
}
Response response = connection.execute();
return response;
}
/**
- 发送JSON格式参数POST请求
- @param url 请求路径
- @param params JSON格式请求参数
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response post(String url, String params) throws IOException {
return doPostRequest(url, null, params);
}
/**
- 发送JSON格式参数POST请求
- @param url 请求路径
- @param headers 请求头中设置的参数
- @param params JSON格式请求参数
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response post(String url, Map<String, String> headers, String params) throws IOException {
return doPostRequest(url, headers, params);
}
/**
- 字符串参数post请求
- @param url 请求URL地址
- @param paramMap 请求字符串参数集合
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response post(String url, Map<String, String> paramMap) throws IOException {
return doPostRequest(url, null, paramMap, null);
}
/**
- 带请求头的普通表单提交方式post请求
- @param headers 请求头参数
- @param url 请求URL地址
- @param paramMap 请求字符串参数集合
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response post(Map<String, String> headers, String url, Map<String, String> paramMap) throws IOException {
return doPostRequest(url, headers, paramMap, null);
}
/**
- 带上传文件的post请求
- @param url 请求URL地址
- @param paramMap 请求字符串参数集合
- @param fileMap 请求文件参数集合
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response post(String url, Map<String, String> paramMap, Map<String, File> fileMap) throws IOException {
return doPostRequest(url, null, paramMap, fileMap);
}
/**
- 带请求头的上传文件post请求
- @param url 请求URL地址
- @param headers 请求头参数
- @param paramMap 请求字符串参数集合
- @param fileMap 请求文件参数集合
- @return HTTP响应对象
- @throws IOException 程序异常时抛出,由调用者处理
*/
public static Response post(String url, Map<String, String> headers, Map<String, String> paramMap, Map<String, File> fileMap) throws IOException {
return doPostRequest(url, headers, paramMap, fileMap);
}
/**
-
执行post请求
-
@param url 请求URL地址
-
@param headers 请求头
-
@param jsonParams 请求JSON格式字符串参数
-
@return HTTP响应对象
-
@throws IOException 程序异常时抛出,由调用者处理
*/
private static Response doPostRequest(String url, Map<String, String> headers, String jsonParams) throws IOException {
if (null == url || url.isEmpty()) {
throw new RuntimeException(“The request URL is blank.”);
}// 如果是Https请求
if (url.startsWith(HTTPS)) {
getTrust();
}Connection connection = Jsoup.connect(url);
connection.method(Method.POST);
connection.timeout(TIME_OUT);
connection.ignoreHttpErrors(true);
connection.ignoreContentType(true);
connection.maxBodySize(0);if (null != headers) {
connection.headers(headers);
}connection.header(CONTENT_TYPE, JSON_TYPE);
connection.requestBody(jsonParams);Response response = connection.execute();
return response;
}
/**
-
普通表单方式发送POST请求
-
@param url 请求URL地址
-
@param headers 请求头
-
@param paramMap 请求字符串参数集合
-
@param fileMap 请求文件参数集合
-
@return HTTP响应对象
-
@throws IOException 程序异常时抛出,由调用者处理
*/
private static Response doPostRequest(String url, Map<String, String> headers, Map<String, String> paramMap, Map<String, File> fileMap) throws IOException {
if (null == url || url.isEmpty()) {
throw new RuntimeException(“The request URL is blank.”);
}// 如果是Https请求
if (url.startsWith(HTTPS)) {
getTrust();
}Connection connection = Jsoup.connect(url);
connection.method(Method.POST);
connection.timeout(TIME_OUT);
connection.ignoreHttpErrors(true);
connection.ignoreContentType(true);
connection.maxBodySize(0);if (null != headers) {
connection.headers(headers);
}// 收集上传文件输入流,最终全部关闭
List inputStreamList = null;
try {// 添加文件参数 if (null != fileMap && !fileMap.isEmpty()) { inputStreamList = new ArrayList<InputStream>(); InputStream in = null; File file = null; for (Entry<String, File> e : fileMap.entrySet()) { file = e.getValue(); in = new FileInputStream(file); inputStreamList.add(in); connection.data(e.getKey(), file.getName(), in); } } // 普通表单提交方式 else { connection.header(CONTENT_TYPE, FORM_TYPE); } // 添加字符串类参数 if (null != paramMap && !paramMap.isEmpty()) { connection.data(paramMap); } Response response = connection.execute(); return response;
}
// 关闭上传文件的输入流
finally {
closeStream(inputStreamList);
}
}
/**
- 关流
- @param streamList 流集合
*/
private static void closeStream(List<? extends Closeable> streamList) {
if (null != streamList) {
for (Closeable stream : streamList) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
-
获取服务器信任
*/
private static void getTrust() {
try {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {@Override public boolean verify(String hostname, SSLSession session) { return true; } }); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new X509TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {} @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {} @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } }, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3:最重要的工具类已经有了,然后就是这么使用啦
Connection.Response respon = HttpsUtils.get(“http://掉用的第三方ip:端口号/BaMicroServiceV2/v1/listIcpShangHaiFatUnit?dwmc=” + dwmc);
String body = respon.body();
这里的dwmc是参数,
4: 转换成json格式的字符串
JSONObject jsonObject = JSONObject.fromObject(body);
到这一步其实已经差不多了,接下来就是根据自己的需求获取相应的json字符串信息啦
5:一个好用的方法,判断是否为json串,推荐给大家
public static boolean isJson(String body) {
try {
JSONObject.fromObject(body);
return true;
} catch (Exception e) {
return false;
}
}
可以把第三步的body传进来,如果返回true,接着执行第四步。ok,是不是很简单
- 请求超时时间