Java 使用OkHttpClient时来自SOCKS服务器的错误回复
我在Java中使用一个工作非常好的假客户端发送REST请求,但是当另外使用OkHttpClient时,我会收到一条错误消息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
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);