Перенаправить всю сеть Android-приложения (использующего библиотеки) через прокси-сеть (если доступно)

Я работаю над приложением для Android и использую различные библиотеки, такие как Picaso, Retrofit, Crashlytics и т. Д., И у моего колледжа WIFI есть прокси.

Я знаю, как использовать прокси при отправке HTTP-запросов на сервер, но все библиотеки, которые я использую, имеют собственные HTTP-запросы, поэтому переопределение всех их HTTP-классов было бы головной болью, и я даже не знаю, как это сделать. что.

Итак, есть ли способ направить весь трафик приложения через прокси-сервер (если он доступен), например любую библиотеку или какой-либо HTTP-запрос, переопределяющий все исходящие запросы.


person Himanshu Babal    schedule 07.06.2016    source источник
comment
Ты заставляешь его работать? Я ищу способ перенаправить весь трафик приложений через прокси. Это возможно?   -  person sak    schedule 22.06.2018
comment
@sak Смотрите мой ответ ниже.   -  person Himanshu Babal    schedule 26.07.2018


Ответы (2)


Я реализовал это, как показано ниже. (забыл первоисточник).

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 вашей базовой активности, чтобы он выполнялся каждый раз, когда пользователь открывает приложение.

person Himanshu Babal    schedule 26.07.2018
comment
Также посетите stackoverflow.com/questions /2642777/ при наличии проблем с сертификатом. - person Himanshu Babal; 26.07.2018
comment
Спасибо, но этот код кажется специфичным для приложения, верно? Он не будет перенаправлять весь трафик устройства через этот прокси? - person sak; 27.07.2018
comment
Да. Он будет направлять только определенные данные приложения через прокси. - person Himanshu Babal; 01.08.2018
comment
Весь трафик устройств -- для этого у нас есть vpn - person Himanshu Babal; 01.08.2018
comment
Встроенная опция VPN в настройках устройства будет перенаправлять весь трафик устройства, или мне нужно создать или использовать какое-либо пользовательское приложение VPN? - person sak; 06.08.2018
comment
Этот код будет направлять трафик вашего конкретного приложения через прокси, то есть proxyHost:proxyPort. Нет необходимости в каких-либо других VPN или других настройках. - person Himanshu Babal; 01.09.2018
comment
привет, должен ли этот код работать и для прокси вне вашей сети? скажем, коммерческие - person Luca; 05.02.2021

Вы можете перенаправить определенный сетевой трафик (для каждого приложения) по следующей ссылке.

Сетевой трафик через прокси

person rosera    schedule 08.06.2016