Com.android.volley.NoConnectionError - Android-эмулятор с Charles Proxy
Я хочу прокси-сервер для эмулятора Android.
Я не могу заставить его работать.
Мой эмулятор загружается с помощью этого:
emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888
IP и порт указывают на то, что Чарльз сообщает в меню "Справка".
Установлен сертификат SSL. Я могу открыть браузер эмулятора, и Чарльз показывает мне весь трафик. Браузер обновляется, как обычно.
Все кажется хорошим до сих пор.
Теперь я пытаюсь запустить свое приложение. Мой первый сетевой звонок успешно проходит через Чарльза. Ответ возвращается, и Чарльз отображает его. Однако ответ не передается в приложение успешно.
Я установил точку останова в обратном вызове ошибки, и я могу видеть com.android.volley.NoConnectionError
, вызванный java.io.IOException: unexpected end of stream on Connection
.
Почему Чарльз не вернул результат обратно в приложение?
Нужно ли мне делать то, что определено на конце страницы конфигурации в Charles?
HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);
Это не кажется правильным - чего мне не хватает?
Ответы
Ответ 1
Чтобы помочь решить
java.io.IOException: неожиданный конец потока при подключении
вопрос, пожалуйста, ответьте на вопросы в комментариях.
Что касается
HttpHost httpproxy = new 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;
}
}
а затем для сборки отладки вы можете использовать smth как:
requestQueue = Volley.newRequestQueue(context, new ProxyHurlStack());
Ответ 2
Единственный способ установить сертификат SSL (Secure Socket Layer) на конец сервера, тогда нет необходимости устанавливать прокси-сервер Charles.
Каждое предприятие имеет две среды разработки,
- Разработка (http): не требуется SSL-сертификат.
- Производство (https): требуется сертификат SSL
Когда производственная среда устанавливает сертификат SSL, тогда эмулятор android и библиотека Volley автоматически обнаруживают сетевое соединение, и вы могли потреблять apis/web-сервисы, как ожидалось.
Нет другого решения этой проблемы.