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());
//            }
//        });
    }

}

上一篇 下一篇