2013-06-25 7 views
0

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

HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost("myURL"); 

    try { 

     ArrayList<BasicNameValuePair> postVariables = new ArrayList<BasicNameValuePair>(2); 
     postVariables.add(new BasicNameValuePair("key","value")); 

     httpPost.setEntity(new UrlEncodedFormEntity(postVariables)); 
     HttpResponse response = httpClient.execute(httpPost); 
     String responseString = EntityUtils.toString(response.getEntity()); 

     if (responseString.contains("\"success\":true")){ 
      //this means the request succeeded 
     } else { 
      //failed 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Это идет очень хорошо, но один из наших клиентов создать APN, который требует запросов, чтобы идти через определенный прокси-сервер. Если добавить следующее к запросу это работает, запрос получает перенаправляется через прокси на сервере:

HttpHost httpHost = new HttpHost("proxyURL",8080); 
    httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, httpHost); 

До сих пор так хорошо, однако, я использую библиотеку, которая делает некоторые запросы HTTP, а также. Код библиотеки не доступен для меня, поэтому я не могу добавить эти две строки в код. Я связался с создателями этой библиотеки, и они сказали мне, что должно быть возможно настроить среду Android, чтобы все запросы автоматически проходили через прокси. Есть что-то в этом роде? Я ничего не нашел в Google.
Я в основном ищу способ установить эти две строки в качестве стандарта для всех HTTP-запросов. Обратите внимание, что APN не устанавливает прокси по умолчанию для всего телефона, поэтому приложения должны будут делать это вручную (и да, это означает, что большинство приложений не работают на телефоне этого клиента).

ответ

1


Это был год или два, так как я должен был использовать его, но если я правильно помню, вы можете использовать System.setProperty(String, String) для того, чтобы установить параметры окружающей среды в масштабах для нанесения на маршрут все HTTP трафика через прокси. Свойства, которые вам нужно установить, - это «http.proxyHost» и «http.proxyPort», а затем обычно используйте HttpClient, не указав прокси-сервер, потому что VM будет обрабатывать запросы маршрутизации.
Документы для получения дополнительной информации о том, что я говорю о том, можно найти здесь: ProxySelector (just so you know what keys to use) и here документации о фактической System.setProperty(String, String) функции
Если это не работает для вас, дайте мне знать, и я постараюсь откопать мой старый код, который устанавливает прокси-сервер на системном уровне. Кстати, это действительно только «системный уровень», поскольку каждое приложение работает в собственном Dalvik, поэтому вы не будете влиять на сетевые коммуникации другого приложения.

+0

Спасибо, я посмотрю на это, это было бы действительно то, что мне нужно. Я не хочу влиять на другие приложения :). – Kevin

+0

Я еще не могу проверить это, но я прочитал ваши предложения, и я думаю, что это правильный путь. Отметьте как ответ, спасибо. – Kevin

Смежные вопросы