java - 如何在Okhttp中使用Socks5代理来启动http请求

标签 java okhttp

如何在Okhttp中使用Socks5代理来启动http请求?

我的代码:

Proxy proxy = new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved(
        "socks5host", 80));
OkHttpClient client = new OkHttpClient.Builder()
       .proxy(proxy).authenticator(new Authenticator() {
            @Override
            public Request authenticate(Route route, Response response) throws IOException {
                if (HttpUtils.responseCount(response) >= 3) {
                    return null;
                }
                String credential = Credentials.basic("user", "psw");
                if (credential.equals(response.request().header("Authorization"))) {
                    return null; // If we already failed with these credentials, don't retry.
                }
                return response.request().newBuilder().header("Authorization", credential).build();
            }
        }).build();


Request request = new Request.Builder().url("http://google.com").get().build();
Response response = client.newCall(request).execute();  <--- **Here, always throw java.net.UnknownHostException: Host is unresolved: google.com**

System.out.println(response.body().string());

如何避免UnknownHostException? 有什么例子吗?

谢谢!

最佳答案

我找到了一个解决方案:当创建OkHttpClient.Builder()时,设置一个新的socketFactory而不是设置代理,并在socketFactory createSocket中返回一个sock5代理。

关于java - 如何在Okhttp中使用Socks5代理来启动http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40011055/

相关文章:

java - Spring 数据 Neo4j + Kotlin 上的日期转换器

java - okhttp validator 是否处理 403 错误?

java - 如何通过 OkHttp 向 HTTP GET 请求添加查询参数?

okhttp - 为指标计时 OkHttpClient 事件的体面方法?

java - 使用 char 而不是 String 来结束 do while 循环。这是可能的? java

java - 打印 0 代替键盘输入

java - 如何解析从 OkHttp 返回的 XML?

java - 检查互联网连接 OKHTTP

java - 在 Java 中处理运行时异常

java - 我们如何更新深度克隆的实体?