gpt4 book ai didi

android - OkHttp 路由流量抛出 wifi 和 SocketFactory

转载 作者:行者123 更新时间:2023-11-30 00:12:18 32 4
gpt4 key购买 nike

我需要路由特定请求抛出 wifi,即使 wifi“已连接,无互联网”和“移动数据”已打开。

下面的示例适用于 HttpURLConnection,但不适用于应用程序的主要网络库 OkHttp3 (3.8.1):

下面的代码在 OkHttp 版本中按预期工作:3.4.2

但自 OkHttp 版本以来已损坏:3.5.0

OkHttpClient.Builder builder = new OkHttpClient.Builder();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final Network[] networks = connectivityManager.getAllNetworks();

for (final Network network : networks) {
final NetworkInfo netInfo = connectivityManager.getNetworkInfo(network);
if (netInfo.getType() == ConnectivityManager.TYPE_WIFI && netInfo.getState() == NetworkInfo.State.CONNECTED) {

// just for example HttpURLConnection works as expected and route traffic throw wifi
connection = (HttpURLConnection) network.openConnection(url);

// not works since >=3.5.0, route traffic in same way
builder.socketFactory(network.getSocketFactory());

}
}
}

OkHttpClient client = builder.build();
final Response response = client.newCall(initialRequest).execute();

client.newCall 没有按我所理解的那样工作,或者我只是遗漏了一些东西。

最佳答案

终于找到了。

https://github.com/square/okhttp/commit/2a5fb08b39195d4238c7117e851e9221f94de62a#diff-ec23bee7240c28053b0ca4fbc6029529

因此,如果您想恢复旧行为(如 3.4.2 版本),您可以采用 java.net.ProxySelector.getDefault() 并将其包装在同样尝试 NO_PROXY 的行为中。

在我的例子中,如上所述,我需要在添加 socketFactory 之前手动禁用代理:

builder.proxy(Proxy.NO_PROXY);
builder.socketFactory(network.getSocketFactory());

关于android - OkHttp 路由流量抛出 wifi 和 SocketFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953968/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com