在创建socket
链接以前,OkHttp
会获取系统的代理信息,若是设置代理,那么经过DNS
解析其IP
而后使用代理IP
来创建socket
链接。若是没有设置代理,那么会使用请求中的url的IP
地址,来创建链接。网络
若是要防抓包,那只须要绕过代理就能够了。socket
OkHttp
使用
ProxySelector
来获取代理信息,在构造
OkHttpClient
时是能够设置的,其默认值是
ProxySelector.getDefault()
,该默认值会反应出系统的代理信息。 那么咱们就能够提供本身的
ProxySelector
实现来达到绕过系统代理的能力。
1 OkHttpClient client = new OkHttpClient.Builder() 2 .proxySelector(new ProxySelector() { 3 @Override 4 public List<Proxy> select(URI uri) { 5 return Collections.singletonList(Proxy.NO_PROXY); 6 } 7 8 @Override 9 public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { 10 11 } 12 }).build();
对于使用OkHttp的网络库,设置网络库不使用代理模式便可😄😄。
var mOkHttpClientBuilder = OkHttpClient.Builder().proxy(Proxy.NO_PROXY)