下面那一版有时候请求不到数据:更新一版异步的:
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import okhttp3.*;
import javax.net.ssl.*;
import java.io.IOException;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* @author jiayq
* @date 2020/1/15 18:25
*/
public class Main {
StringBuffer content = new StringBuffer();
public static void main(String[] args) throws Exception{
new Main().requestHttps();
}
public void requestHttps() throws Exception{
OkHttpClient build = new OkHttpClient.Builder()
.sslSocketFactory(createSSLSocketFactory())
.hostnameVerifier(new TrustAllHostnameVerifier())
.build();
String url = "https://10.226.19.91:8081/jobs/overview";//带https的网址
final Request request = new Request.Builder().url(url).build();
Call call = build.newCall(request);
call.enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
System.out.print(e.getMessage());
}
public void onResponse(Call call, Response response)
throws IOException{
String res = response.body().string();
System.out.println(res)
}
});
System.out.print(content.toString());
}
private static class TrustAllCerts implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}
}
private static class TrustAllHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory ssfFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new TrustAllCerts() }, new SecureRandom());
ssfFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return ssfFactory;
}
}
再来一版同步的:
public static void main(String[] args) throws Exception{
new Main().requestHttps();
}
public void requestHttps(){
StringBuffer content = new StringBuffer();
try {
OkHttpClient build = new OkHttpClient.Builder()
.sslSocketFactory(createSSLSocketFactory())
.hostnameVerifier(new TrustAllHostnameVerifier())
.build();
String url = "https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=1434,21123&wd=csdn&req=2&bs=csdn&pbs=csdn&csor=4&pwd=csdn&cb=jQuery1102034148064671231326_1579230598307&_=1579230598364\n";//带https的网址
Request request = new Request.Builder().url(url).build();
Call call = build.newCall(request);
Response response = call.execute();
String res = response.body().string();
if(res != null && !"".equals(res)){
//你的解析代码
}
} catch (Exception e){
}
}
private static class TrustAllCerts implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}
}
private static class TrustAllHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory ssfFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new TrustAllCerts() }, new SecureRandom());
ssfFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return ssfFactory;
}
1.这是一个获取openshift token的例子,注释掉的代码是以前的http请求,代码没有涉及敏感信息,就贴上来了。简单易懂。
import okhttp3.*;
import javax.net.ssl.*;
import java.io.IOException;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class TokenUtil {
OkHttpClient client = new OkHttpClient();
public String authorize(String endPoint, String userName, String password) {
try{
OkHttpClient.Builder builder = client.newBuilder().
sslSocketFactory(createSSLSocketFactory()).
hostnameVerifier(new TrustAllHostnameVerifier());
builder.interceptors().remove(this);
OkHttpClient clone = builder.build();
String credential = Credentials.basic(userName, password);
URL url = new URL(endPoint + "oauth/authorize?client_id=openshift-challenging-client&response_type=token");
Response response = clone.newCall(new Request.Builder().get().url(url).header("Authorization", credential).build()).execute();
response.body().close();
response = response.priorResponse() != null ? response.priorResponse() : response;
response = response.networkResponse() != null ? response.networkResponse() : response;
String token = response.header("Location");
if (token == null || token.isEmpty()) {
}
token = token.substring(token.indexOf("access_token=") + "access_token=".length());
token = token.substring(0, token.indexOf("&expires"));
System.out.print(token);
return token;
}catch (Exception e) {
return "";
}
}
private static class TrustAllCerts implements 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];}
}
private static class TrustAllHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory ssfFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new TrustAllCerts() }, new SecureRandom());
ssfFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return ssfFactory;
}
/*public String authorize(String endPoint, String userName, String password) {
try {
OkHttpClient.Builder builder = client.newBuilder();
builder.interceptors().remove(this);
OkHttpClient clone = builder.build();
String credential = Credentials.basic(userName, password);
URL url = new URL(endPoint + "oauth/authorize?client_id=openshift-challenging-client&response_type=token");
Response response = clone.newCall(new Request.Builder().get().url(url).header("Authorization", credential).build()).execute();
response.body().close();
response = response.priorResponse() != null ? response.priorResponse() : response;
response = response.networkResponse() != null ? response.networkResponse() : response;
String token = response.header("Location");
if (token == null || token.isEmpty()) {
}
token = token.substring(token.indexOf("access_token=") + "access_token=".length());
token = token.substring(0, token.indexOf("&expires"));
System.out.print(token);
return token;
} catch (Exception e) {
//throw KubernetesClientException.launderThrowable(e);
return "";
}
}*/
}