1- 最近跟别的部门对接几个接口 对方提供的是https 百度了好久 好多人用的方法都是过期的后面花了我一天半的时间去改跟百度 出来的结果跟大家分享一下
2-先创建信任证书的管理器
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
// 信任证书的管理器
public class MyX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
3-创建忽略证书的跳过ssl 这个创建再post get请求页面上就行了
//添加信任主机
private static void trustAllHosts() {
// 创建不验证证书链的信任管理器 这里使用的是x509证书
TrustManager[] trustAllCerts = new TrustManager[]{new MyX509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
}};
// 安装所有信任的信任管理器
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
//HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
}
//添加主机名验证程序类,设置不验证主机
private final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
/**
* map转url参数
*/
public static String map2Url(Map<String, String> paramToMap) {
if (null == paramToMap || paramToMap.isEmpty()) {
return null;
}
StringBuffer url = new StringBuffer();
boolean isfist = true;
for (Map.Entry<String, String> entry : paramToMap.entrySet()) {
if (isfist) {
isfist = false;
} else {
url.append("&");
}
url.append(entry.getKey()).append("=");
String value = entry.getValue();
if (!StringUtils.isEmpty(value)) {
url.append(value);
}
}
return url.toString();
}
4- https post请求 x-www-form-urlencoded 和form-data 提交的
/**
* 发送post 数据 请求 x-www-form-urlencoded 和form-data 提交的
*
* @param urls
* @return
*/
public static String sendPost(String urls, String param) {
StringBuffer sb = new StringBuffer();
DataOutputStream out = null;
BufferedReader responseReader = null;
InputStream in1 = null;
try {
// 跳过ssl
trustAllHosts();
// 创建url资源
URL url = new URL(urls);
// 建立http连接
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
// 忽略证书
conn.setHostnameVerifier(DO_NOT_VERIFY);
// 设置不用缓存
conn.setUseCaches(false);
// 设置允许输出
conn.setDoOutput(true);
// 设置允许输入
conn.setDoInput(true);
// 设置传递方式
conn.setRequestMethod("POST");
//System.out.println(conn.getRequestMethod());
// 设置维持长连接
conn.setRequestProperty("Connection", "Keep-Alive");
// 设置文件字符集:
conn.setRequestProperty("Charset", "UTF-8");
// 转换为字节数组
// byte[] data = (param).getBytes();
// // 设置文件长度
// conn.setRequestProperty("Content-Length", String.valueOf(data.length));
// 设置文件类型:
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=UTF-8" );
// 开始连接请求
conn.connect();
out = new DataOutputStream(conn.getOutputStream());
// 写入请求的字符串
out.writeBytes(param);
out.flush();
out.close();
//System.out.println(conn.getResponseCode());
// 请求返回的状态
if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
System.out.println("连接成功");
// 请求返回的数据
in1 = conn.getInputStream();
String readLine;
responseReader = new BufferedReader(new InputStreamReader(in1));
while ((readLine = responseReader.readLine()) != null) {
sb.append(readLine).append("\n");
}
} else {
System.out.println("连接成功");
// 请求返回的数据
in1 = conn.getErrorStream();
String readLine;
responseReader = new BufferedReader(new InputStreamReader(in1));
while ((readLine = responseReader.readLine()) != null) {
sb.append(readLine).append("\n");
}
}
} catch (Exception e) {
} finally {
try {
if (null != responseReader)
responseReader.close();
if (null != in1)
in1.close();
} catch (Exception e) {
}
try {
out.close();
} catch (Exception e) {
}
}
return sb.toString();
}
3-测试发送
Map<String, String> paramData = new HashMap<String, String>();
paramData.put("client", clientId);
paramData.put("secret", clientSecret);
paramData.put("type", grantType);
String s = HttpRequestUtil.sendPost(url, HttpRequestUtil.map2Url(paramData));
5- https post 请求 json 格式发送数据
/**
* 发送post 数据
*
* @param urls
* @return
*/
public static String sendPost(String urls, String param,String token) {
StringBuffer sb = new StringBuffer();
//PrintWriter out = null;
DataOutputStream out=null;
BufferedReader responseReader = null;
InputStream in1 = null;
try {
// 跳过ssl验证
trustAllHosts();
// 创建url资源
URL url = new URL(urls);
// 建立http连接
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
// 忽略证书
conn.setHostnameVerifier(DO_NOT_VERIFY);
// 设置不用缓存
conn.setUseCaches(false);
// 设置允许输出
conn.setDoOutput(true);
// 设置允许输入
conn.setDoInput(true);
// 设置传递方式
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
// 根据对方提供的接口要不要携带token 不要的话直接传null 就行了
if (token !=null) {
conn.setRequestProperty("Authorization", token);
}
// 设置传递方式
conn.setRequestMethod("POST");
// 设置维持长连接
conn.setRequestProperty("Connection", "Keep-Alive");
// 开始连接请求
conn.connect();
//获取服务端发送的信息:conn.getOutputStream()
// POST请求
out = new DataOutputStream(conn.getOutputStream());
out.writeChars(param);
out.flush();
out.close();
System.out.println(conn.getResponseCode());
System.out.println(conn.getInputStream());
// 请求返回的状态
if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
System.out.println("连接成功");
// 请求返回的数据
in1 = conn.getInputStream();
String readLine;
responseReader = new BufferedReader(new InputStreamReader(in1));
while ((readLine = responseReader.readLine()) != null) {
sb.append(readLine).append("\n");
}
} else {
System.out.println("连接成功");
// 请求返回的数据
in1 = conn.getErrorStream();
String readLine;
responseReader = new BufferedReader(new InputStreamReader(in1));
while ((readLine = responseReader.readLine()) != null) {
sb.append(readLine).append("\n");
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
try {
if (null != responseReader)
responseReader.close();
if (null != in1)
in1.close();
} catch (Exception e) {
}
try {
out.close();
} catch (Exception e) {
}
}
return sb.toString();
}
6- 对象转成json格式传递
// 对象转成json 格式的字符串
String data = JSON.toJSONString(ooo);
// 发送json格式的请求
String reqData = httpstow.sendPost(url,data,toke );
7- 发送get请求 其实get请求跟上面的是一样的 我这里就直接路径拼接参数就行了
/**
* 发送get 数据
*
* @param urls
* @return
*/
public static String sendGet(String urls,String token) {
StringBuffer sb = new StringBuffer();
DataOutputStream out = null;
BufferedReader responseReader = null;
InputStream in1 = null;
try {
// 跳过ssl验证
trustAllHosts();
// 创建url资源
URL url = new URL(urls);
// 建立http连接
HttpsURLConnection conn= (HttpsURLConnection) url.openConnection();
// 忽略证书
conn.setHostnameVerifier(DO_NOT_VERIFY);
// 设置不用缓存
conn.setUseCaches(false);
// 设置允许输出
conn.setDoOutput(true);
// 设置允许输入
conn.setDoInput(true);
// 设置传递方式
conn.setRequestMethod("GET");
//System.out.println(conn.getRequestMethod());
// 设置维持长连接
conn.setRequestProperty("connection", "keep-alive");
// 设置文件字符集:
// conn.setRequestProperty("Charset", "UTF-8");
// 转换为字节数组
// byte[] data = (param).getBytes();
// // 设置文件长度
// conn.setRequestProperty("Content-Length", String.valueOf(data.length));
if (token !=null) {
// 设置文件类型:
conn.setRequestProperty("Authorization", token);
}
// 开始连接请求
conn.connect();
// out = new DataOutputStream(conn.getOutputStream());
// 写入请求的字符串
// out.writeBytes(param);
//out.flush();
//out.close();
//System.out.println(conn.getResponseCode());
// 请求返回的状态
if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
System.out.println("连接成功");
// 请求返回的数据
in1 = conn.getInputStream();
String readLine;
responseReader = new BufferedReader(new InputStreamReader(in1));
while ((readLine = responseReader.readLine()) != null) {
sb.append(readLine).append("\n");
}
} else {
System.out.println("连接成功");
// 请求返回的数据
in1 = conn.getErrorStream();
String readLine;
responseReader = new BufferedReader(new InputStreamReader(in1));
while ((readLine = responseReader.readLine()) != null) {
sb.append(readLine).append("\n");
}
}
} catch (Exception e) {
} finally {
try {
if (null != responseReader)
responseReader.close();
if (null != in1)
in1.close();
} catch (Exception e) {
}
try {
out.close();
} catch (Exception e) {
}
}
return sb.toString();
}
8-测试发送数据