使用okhttp3作为网络请求框架,提供设置代理的方法
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("xx.xx.xx.x", 1080));
        mOkHttpClient = new OkHttpClient.Builder()
             .proxy(proxy)
在Android 7.0 以上的手机上,不管是模拟器还是真机都可以访问服务器获取错误
只有在Android 6.0 和Android 6.0.1 真机和模拟器上出现以下错误:
java.lang.RuntimeException:java.net.UnknownHostException: Host is unresolved: mall.zdmt.io
2 io.reactivex.internal.util.ExceptionHelper.wrapOrThrow(ExceptionHelper.java:45)
3 ......
4 Caused by:
5 java.net.UnknownHostException:Host is unresolved: xx.xxx.xx
6 java.net.Socket.connect(Socket.java:893)
7 okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.java:69)
8 okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:238)
9 okhttp3.internal.connection.RealConnection.connect(RealConnection.java:158)
10 okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256)
11 okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134)
12 okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113)
13 okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
14 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
15 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
16 okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
17 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
18 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
19 okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
20 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
21 okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
22 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
23 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
24 www.example.utils.LogInterceptor.intercept(LogInterceptor.java:67)
25 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
26 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
27 okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
28 okhttp3.RealCall.execute(RealCall.java:77)
29 retrofit2.OkHttpCall.execute(OkHttpCall.java:180)
30 retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41)
31 io.reactivex.Observable.subscribe(Observable.java:12030)
32 io.reactivex.internal.operators.observable.ObservableLift.subscribeActual(ObservableLift.java:57)
33 io.reactivex.Observable.subscribe(Observable.java:12030)
34 io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:33)
35 io.reactivex.Observable.subscribe(Observable.java:12030)
36 io.reactivex.Observable.blockingFirst(Observable.java:4986)是Android 6.0到Android 7.0 这块有改动吗?怎么在Android 6.0上使用代理?

解决方案 »

  1.   

    最新测试 使用 HttpURLConnection 设置代理就没有问题 ,看来是okhttp的原因
     Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("xx.xx.xx.xx", 1080));
                        URL url = new URL("http://www.163.com");
                        connection = (HttpURLConnection) url.openConnection(proxy);