【问题标题】:Redirect all network of Android App (which is using Libraries) through a proxy network (if available)通过代理网络(如果可用)重定向 Android 应用程序的所有网络(正在使用库)
【发布时间】:2024-04-19 20:30:02
【问题描述】:

我正在开发一个 Android 应用程序,我正在使用各种库,如 Picaso、Retrofit、Crashlytics 等,我的大学 WIFI 上有代理。

我知道在向服务器发送 HTTP 请求时如何使用代理,但是我使用的所有库都有自己的 HTTP 请求,因此覆盖它们的所有 HTTP 类会很头疼,我什至不确定如何做到这一点。

那么,有没有办法通过代理(如果可用)路由应用程序的所有流量,就像任何库或一些覆盖所有传出请求的 HTTP 请求一样。

【问题讨论】:

  • 你让它工作了吗?我正在寻找一种通过代理重定向所有应用程序流量的方法。这可能吗?
  • @sak 请在下面查看我的答案。

标签: java android networking proxy http-proxy


【解决方案1】:

我实现了如下。 (我忘记了原始来源)。

import java.net.Proxy;
import java.net.ProxySelector;

//setting Application-Wide proxy Values
private void setProxy() {
    //Device proxy settings
    ProxySelector defaultProxySelector = ProxySelector.getDefault();
    Proxy proxy = null;
    List<Proxy> proxyList = defaultProxySelector.select(URI.create("http://www.google.in"));
    if (proxyList.size() > 0) {
        proxy = proxyList.get(0);

        Log.d("proxy", String.valueOf(proxy));

        try {
            String proxyType = String.valueOf(proxy.type());

            //setting HTTP Proxy
            if (proxyType.equals("HTTP")) {
                String proxyAddress = String.valueOf(proxy.address());
                String[] proxyDetails = proxyAddress.split(":");
                String proxyHost = proxyDetails[0];
                String proxyPort = proxyDetails[1];
                Log.d("proxy", proxyType + " " + proxyHost + " " + proxyPort);

                System.setProperty("http.proxyHost", proxyHost);
                System.setProperty("http.proxyPort", proxyPort);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

将此方法放在基础活动的 onCreate 方法中,以便每次用户打开应用程序时都会执行。

【讨论】:

  • 如果有证书问题,也请访问*.com/questions/2642777/…
  • 谢谢,但是这段代码似乎是特定于应用程序的,对吧?它不会通过该代理重定向所有设备流量?
  • 是的。它只会通过代理引导特定的应用程序数据。
  • 所有设备流量——我们有 vpn
  • 设备设置中的内置 VPN 选项将重定向所有设备流量,或者我必须创建或使用任何自定义 VPN 应用程序?
【解决方案2】:

您可以按照以下链接重定向特定的网络流量(基于每个应用程序)。

Network traffic via Proxy

【讨论】:

    最近更新 更多