java中各种使用设置代理的方法

1、http代理

package main.java.com.example;
import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class testproxy {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("43.248.79.157", 54267);
        String query = Executor.newInstance()
            .auth(entry, "crnr98", "ae44equ3")
            .execute(Request.Get("http://myip.ipip.net").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
2、socks代理

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


    public class socksProxy
    {
        public static void main(String[] args) throws Exception
        {
            Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("43.248.99.32", 50215));//设置socks代理服务器ip端口
            System.out.println(proxy);
            java.net.Authenticator.setDefault(new java.net.Authenticator()//socks代理要进行认证
            {
                private PasswordAuthentication authentication = new PasswordAuthentication("crnr98", "ae44equ3".toCharArray());//上送代理对应的账密

                @Override
                protected PasswordAuthentication getPasswordAuthentication()
                {
                    return authentication;
                }
            });
            //tcp方式
            /*Socket client = new Socket(proxy);
            client.connect(new InetSocketAddress("222.95.148.10", 8080));
            System.out.println(client);
            client.close();*/
            
            //okhttp方式
            OkHttpClient client = new OkHttpClient.Builder().connectTimeout(150, TimeUnit.SECONDS).proxy(proxy).build();//创建OkHttpClient,并且设置超时时间和代理

            Request request = new Request.Builder().url("http://www.99bill.com").get().build();//查询本机ip地址请求
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
            CloseableHttpClient client = null;
             HttpGet httpGet = new HttpGet(targetUrl);
             client = getHttpClient(proxy);
             CloseableHttpResponse response = getHttpClient.execute(httpGet);         
             String resultStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
             System.out.println("访问目标地址结果:"+resultStr);

    }
 

3、http方式中走账密验证和不走账密验证
 

package main.java.com.example;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.nio.charset.StandardCharsets;

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import okhttp3.Authenticator;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Route;

public final class Demo {

    public static void main(String[] args) throws IOException {
        String ip = "1.199.167.15"; // 代理主机地址
        int port = 27320; // 代理主机端口

        // 使用OKHttp库
        // OKHttpProxy.build(ip, port).test();
        //OKHttpProxy.build(ip, port, "9govbw", "gbqgn4a2").test(); // 代理认证

        // 使用HttpClient库
        //HttpClientProxy.build(ip, port).test();
        HttpClientProxy.build(ip, port, "9govbw", "gbqgn4a2").test(); // 代理认证
    }

    /**
     * OKHttp库使用代理
     */
    static class OKHttpProxy {

        String proxyHost;
        int proxyPort;
        String proxyAccount;
        String proxyPwd;

        /**
         * @param host 代理主机地址
         * @param port 代理主机端口
         */
        public static OKHttpProxy build(String host, int port) {
            OKHttpProxy proxy = new OKHttpProxy();
            proxy.proxyHost = host;
            proxy.proxyPort = port;
            return proxy;
        }

        /**
         * @param host 代理主机地址
         * @param port 代理主机端口
         * @param acc 代理认证账号
         * @param pwd 代理认证口令
         */
        public static OKHttpProxy build(String host, int port, String acc, String pwd) {
            OKHttpProxy proxy = new OKHttpProxy();
            proxy.proxyHost = host;
            proxy.proxyPort = port;
            proxy.proxyAccount = acc;
            proxy.proxyPwd = pwd;
            return proxy;
        }

        public void test() throws IOException {
            String targetUrl = "http://myip.ipip.net";

            OkHttpClient client = null;
            if (proxyAccount == null || proxyPwd == null) {
                client = getHttpClient(proxyHost, proxyPort);
            } else {
                // 账号密码验证
                client = getHttpClient(proxyHost, proxyPort, proxyAccount, proxyPwd);
            }

            Request request = new Request.Builder()
                    .url(targetUrl)
                    .build();
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
        }

        /**
         * 代理不需要账号密码认证的httpClient
         */
        private static OkHttpClient getHttpClient(String proxyHost, int proxyPort) {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
            return new OkHttpClient.Builder()
                    .proxy(proxy)
                    .build();
        }

        /**
         * 代理需要账号密码认证的httpClient
         */
        private static OkHttpClient getHttpClient(String proxyHost, int proxyPort, final String acc, final String pwd) {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
            // 账号密码验证
            Authenticator authenticator = new Authenticator() {
                public Request authenticate(Route route, Response resp) throws IOException {
                    String credential = Credentials.basic(acc, pwd);
                    return resp.request().newBuilder().header("Proxy-Authorization", credential).build();
                }
            };
            return new OkHttpClient.Builder()
                    .proxy(proxy)
                    .proxyAuthenticator(authenticator)
                    .build();
        }

    }
    
    /**
     * HttpClient库使用代理
     */
    static class HttpClientProxy {
        String proxyHost;
        int proxyPort;
        String proxyAccount;
        String proxyPwd;

        /**
         * @param host 代理主机地址
         * @param port 代理主机端口
         */
        public static HttpClientProxy build(String host, int port) {
            HttpClientProxy proxy = new HttpClientProxy();
            proxy.proxyHost = host;
            proxy.proxyPort = port;
            return proxy;
        }

        /**
         * @param host 代理主机地址
         * @param port 代理主机端口
         * @param acc 代理认证账号
         * @param pwd 代理认证口令
         */
        public static HttpClientProxy build(String host, int port, String acc, String pwd) {
            HttpClientProxy proxy = new HttpClientProxy();
            proxy.proxyHost = host;
            proxy.proxyPort = port;
            proxy.proxyAccount = acc;
            proxy.proxyPwd = pwd;
            return proxy;
        }

        public void test() throws IOException {
            String targetUrl = "http://myip.ipip.net";

            CloseableHttpClient client = null;
            if (proxyAccount == null || proxyPwd == null) {
                client = getHttpClient(proxyHost, proxyPort);
            } else {
                // 账号密码验证
                client = getHttpClient(proxyHost, proxyPort, proxyAccount, proxyPwd);
            }
            HttpGet httpGet = new HttpGet(targetUrl);
            CloseableHttpResponse response = client.execute(httpGet);
            String resultStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            System.out.println(resultStr);
        }

        /**
         * 代理不需要账号密码认证的httpClient
         */
        private static CloseableHttpClient getHttpClient(String proxyHost, int proxyPort) {
            HttpHost proxy = new HttpHost(proxyHost, proxyPort, "HTTP");
            return HttpClients.custom()
                    .setProxy(proxy)
                    .build();
        }

        /**
         * 代理需要账号密码认证的httpClient
         */
        private static CloseableHttpClient getHttpClient(String proxyHost, int proxyPort, String acc, String pwd) {
            HttpHost proxy = new HttpHost(proxyHost, proxyPort, "HTTP");
            CredentialsProvider provider = new BasicCredentialsProvider();
            provider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials(acc, pwd));

            return HttpClients.custom()
                    .setProxy(proxy)
                    .setDefaultCredentialsProvider(provider)
                    .build();
        }

    }

}
推荐一家好用的代理ip成功率挺高的:https://h.shenlongip.com/index?from=seller&did=h4Dmox

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非凡的小羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值