Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OkHttpClient时来自SOCKS服务器的错误回复_Java_Rest_Okhttp_Socks_Spring Cloud Feign - Fatal编程技术网

Java 使用OkHttpClient时来自SOCKS服务器的错误回复

Java 使用OkHttpClient时来自SOCKS服务器的错误回复,java,rest,okhttp,socks,spring-cloud-feign,Java,Rest,Okhttp,Socks,Spring Cloud Feign,我在Java中使用一个工作非常好的假客户端发送REST请求,但是当另外使用OkHttpClient时,我会收到一条错误消息 Caused by: feign.RetryableException: Malformed reply from SOCKS server executing GET 我确定了导致此错误的代码行 OkHttpClient.Builder builder = new OkHttpClient.Builder(); ... builder.proxy(new Proxy(P

我在Java中使用一个工作非常好的假客户端发送REST请求,但是当另外使用OkHttpClient时,我会收到一条错误消息

Caused by: feign.RetryableException: Malformed reply from SOCKS server executing GET
我确定了导致此错误的代码行

OkHttpClient.Builder builder = new OkHttpClient.Builder();
...
builder.proxy(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(socksProxyHost, socksProxyPort)));
然而,由于我既需要OkHttpClient,又需要使用假客户端发送请求,所以我不能仅仅删除它,而是必须找到一个解决方法。有没有一种方法可以重置代理设置,只要我通过外挂发送请求,然后再将其设置回原位?我尝试使用以下命令将默认代理服务器设置为null

proxySelector.setDefault(null)
但不幸的是,这并没有解决我的问题


谢谢你的帮助

创建两个OkHttpClient实例,一个配置了代理,一个没有

builder.proxy(Proxy.NO_PROXY);

如果使用
OkHttpClient.newBuilder()
从另一个客户端创建一个客户端,它们将共享
ExecutorService
和其他资源。

我通过分配一个新的代理选择器而不是实际的代理来修复这个问题。重写select方法时,我确保使用外部客户端发送的请求的代理列表为空:

 ProxySelector proxySelector = new ProxySelector() {
            @Override
            public List<Proxy> select(URI uri) {
                if (uri.toString().contains("HOST_NAME")) {
                    return List.of();
                }
                return List.of(
                        new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(socksProxyHost, socksProxyPort)));
            }

            @Override
            public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {

            }
        };
        builder.proxySelector(proxySelector);
ProxySelector ProxySelector=new ProxySelector(){
@凌驾
公共列表选择(URI){
if(uri.toString()包含(“主机名”)){
返回List.of();
}
返回列表(
新代理(Proxy.Type.SOCKS,新InetSocketAddress(socksproxy主机,socksproxy端口));
}
@凌驾
public void connectFailed(URI、SocketAddress sa、IOException ioe){
}
};
builder.proxySelector(proxySelector);