package com.yh.proxy.pay.util;
import com.yh.proxy.basic.utils.RandomDataUtils;
import lombok.SneakyThrows;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* @title: MyThread
* 多线程并发使用代理访问http
* @Author kunkun
* @Date: 2022/3/16 16:32
* @Version 1.0
*/
public class MyThread {
public static void main(String[] args) {
Object o = new Object();
OkHttpClient client = okHttpClient();
ExecutorService pool = Executors.newFixedThreadPool(80);//指定数量线程
while (true) {
synchronized (o) {
String url = "https://api.live.bilibili.com/client/v1/Ip/getInfoNew";
Integer randomData = RandomDataUtils.getRandomData(1, 500);
String authUser = "huangkun1zz-" + randomData;//死循环随机子账号
// String authUser = "huangkun1zz-" + i;//for循环子账号
String authPassword = "52B4EG20";
String proxyHost = "gate.hide-proxy.pro";
Integer port = 1234;
pool.execute(new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
ProxyConnect1.test(authUser, authPassword, proxyHost, port, url, null, client);
}
}));
}
}
}
public static X509TrustManager x509TrustManager() {
return new 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 new X509Certificate[0];
}
};
}
// @Bean
public static SSLSocketFactory sslSocketFactory() {
try {
//信任任何链接
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom());
return sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return null;
}
// @Bean
public static ConnectionPool pool() {
return new ConnectionPool(120, 50, TimeUnit.MINUTES);
}
public static OkHttpClient okHttpClient(){
return new OkHttpClient().newBuilder()
.retryOnConnectionFailure(true)//容错 重连打开
.sslSocketFactory(sslSocketFactory(), x509TrustManager())
.connectionPool(pool())
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60,TimeUnit.SECONDS)
.writeTimeout(60,TimeUnit.SECONDS)
.build();
}
}
package com.yh.proxy.pay.util;
import cn.hutool.core.util.ObjectUtil;
import okhttp3.*;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.Proxy;
import java.util.List;
/**
* @title: ProxyConnect
* @Author kunkun
* @Date: 2022/3/10 8:58
* @Version 1.0
*/
public class ProxyConnect1 {
public static void test(String authUser, String authPassword, String proxyHost, int proxyPort, String destURL, List<String> list,OkHttpClient okHttpClient) throws MalformedURLException,
ProtocolException,
IOException {
// final String authUser = "huangkun1zz-99";
// final String authPassword = "52B4EG20";
// final String proxyHost = "gate.hide-proxy.pro";
// final int proxyPort = 1234;
// final String destURL = "https://api.live.bilibili.com/client/v1/Ip/getInfoNew";
Thread thread = Thread.currentThread();
System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
System.setProperty("jdk.http.auth.proxying.disabledSchemes", "");
okhttp3.Authenticator proxyAuthenticator = new okhttp3.Authenticator() {
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(authUser, authPassword);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
}
};
OkHttpClient newOkHttpClient = okHttpClient.newBuilder()
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)))
.proxyAuthenticator(proxyAuthenticator)
.authenticator(proxyAuthenticator).build();
// Request request = new Request.Builder().url(destURL).addHeader("Connection","close").build();
Request request = new Request.Builder().url(destURL).build();
Response response = null;
try {
response = newOkHttpClient.newCall(request).execute();
} catch (Exception e) {
System.err.println(e);
}
if(ObjectUtil.isNotNull(response)){
String str = response.body().string();
System.out.println(Thread.currentThread().getName()+" "+"当前子账号是: "+authUser+str);
}
// Request request = new Request.Builder().url(destURL).build();
// //异步请求
// Call call = newOkHttpClient.newCall(request);
// call.enqueue(new Callback() {
// @Override
// public void onFailure(Call call, IOException e) {
// System.out.println(Thread.currentThread().getName()+" "+"当前子账号是: "+authUser+"请求失败");
// }
// @Override
// public void onResponse(Call call, Response response) throws IOException {
// System.out.println(Thread.currentThread().getName()+" "+"当前子账号是: "+authUser+response.body().string());
// }
// });
}
}