2016-08-12 3 views
15

Я хочу прокси-трафик для эмулятора Android.com.android.volley.NoConnectionError - Android-эмулятор с Charles Proxy

Я не могу заставить его работать.

Мой эмулятор загружается с помощью этого:

emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888 

ИС и порта указывает на то, что сообщает Чарльз в меню Справка.

Установлен сертификат SSL. Я могу открыть браузер эмулятора, и Чарльз показывает мне весь трафик. Браузер обновляется, как обычно.

Все кажется хорошим до сих пор.

Теперь я пытаюсь запустить свое приложение. Мой первый сетевой звонок успешно проходит через Чарльза. Ответ возвращается, и Чарльз отображает его. Однако ответ не передается в приложение успешно.

Я установил точку останова в обратном вызове ошибки, и я вижу com.android.volley.NoConnectionError, который вызван java.io.IOException: unexpected end of stream on Connection.

Почему Чарльз не вернул результат обратно в приложение?

Нужно ли делать то, что определено на the end of the configuration page on Charles?

HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http"); 
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy); 

Это не кажется правильным - что мне не хватает?

+0

Вы говорите о сертификате SSL ... Является ли ваш прокси-сервер SSL один? Или вы пытаетесь подключиться к сайту, защищенному SSL? – Jehy

+0

Если вы хотите отслеживать трафик https, я предлагаю использовать Fiddler, что более удобно с точки зрения этого. – suitianshi

+0

Какой HttpStack вы используете? попробуйте добавить -verbose-proxy при запуске эмулятора и добавить к вопросу вывод – djodjo

ответ

-1

Единственный способ установить сертификат SSL (Secure Socket Layer) на сервере, после чего не нужно устанавливать прокси-сервер Charles.

Каждое предприятие имеет две среды разработки,

  1. развития (HTTP): не нуждается в какой-либо сертификат SSL
  2. Производство (HTTPS): нуждается SSL сертификат

Когда производство окружающей среды устанавливает SSL-сертификат, тогда эмулятор android и библиотека Volley автоматически обнаруживают сетевое соединение, и вы могли потреблять apis/web-сервисы, как ожидалось.

Нет другого решения этой проблемы.

2

Для того, чтобы помочь решению

java.io.IOException: неожиданный конец потока на подключение

вопрос, пожалуйста, ответьте на вопросы в комментариях.

Что касается до

HttpHost httpproxy = новый HttpHost ("192.168.0.101", 8888, "HTTP"); httpClient.getParams(). SetParameter (ConnRoutePNames.DEFAULT_PROXY, httpproxy);

Это не поможет вам просто так. На самом деле это еще один способ применения прокси-сервера, который IMO даже лучше, чем «-http-proxy», потому что вы можете применить его в любом месте не только для эмулятора, а только для этой сборки приложения.

Вам необходимо применить прокси-сервер в используемом вами стеке Http. например:

public class ProxyHurlStack extends HurlStack { 

    @Override 
    protected HttpURLConnection createConnection(URL url) throws IOException { 
     Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.1.17", 8888)); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); 
     return conn; 
    } 
} 

, а затем для отладки сборки, вы можете использовать как л:

requestQueue = Volley.newRequestQueue(context, new ProxyHurlStack()); 
Смежные вопросы