在創建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)