Приложение Android не может подключиться к локальному IP в эмуляторе через прокси
Мне нужно иметь возможность вставить прокси-сервер между моим приложением и сервером HTTP, с которым оно взаимодействует. HTTP-сервер работает на другой машине в локальной сети. Прокси-сервер работает на той же машине, что и эмулятор.
Я использую android-10, и испытываю те же проблемы на Ubuntu и Windows 7.
Если запустить эмулятор следующим образом:
emulator.exe @default
Тогда приложение подключится нормально.
Однако, если я начну приложение, как это:
emulator.exe @default -http-proxy 127.0.0.1:8008
Запросы, сделанные из интернет-браузера (в Google), будут проходить через прокси-сервер, но приложение не сможет установить соединение.
Я попытался установить параметры прокси-сервера в APN, а также использовать IP-адрес локальной сети моей локальной машины.
Приложение использует HTTP (http://developer.android.com/reference/java/net/HttpURLConnection.html), так что прокси должен быть в состоянии интерпретировать запрос.
Я могу получить доступ к серверу через интернет браузер в эмуляторе с выключенным прокси,но не с включенным прокси.
Я запустил эмулятор со следующей строкой:
emulator.exe @default -http-proxy 127.0.0.1:8008 -debug-proxy
И заметил, что запросы выходили в виде:
http_service_connect: trying to connect to 192.168.3.131:8080
http_service_connect: using HTTP rewriter
tcp:192.168.3.131:8080(35): connecting
tcp:192.168.3.131:8080(35): connected to http proxy, sending header
tcp:192.168.3.131:8080(35): sending 39 bytes:
>> 43 4f 4e 4e 45 43 54 20 31 39 32 2e 31 36 38 2e CONNECT 192.168.
>> 33 2e 31 33 31 3a 38 30 38 30 20 48 54 54 50 2f 3.131:8080 HTTP/
>> 31 2e 31 0d 0a 0d 0a 1.1....
tcp:192.168.3.131:8080(35): header sent, receiving first answer line
tcp:192.168.3.131:8080(35): received 'HTTP/1.0 200 Connection established'
tcp:192.168.3.131:8080(35): receiving second answer line
tcp:192.168.3.131:8080(35): received ''
tcp:192.168.3.131:8080(35): connection succeeded
Но ни один запрос GET или POST никогда не попадает на прокси-сервер.
Какие-либо рекомендации по дальнейшему устранению этой проблемы?
2 ответов:
Вы должны использовать 10.0.2.2 вместо 127.0.0.1. Android считает, что localhost вашего ПК - это 10.0.2.2.
На случай, если кто-нибудь придет посмотреть, вот как я решил эту проблему:
Я настроил приложение на прямой разговор с прокси:
10.0.2.2:8080Затем я настроил прокси для пересылки всех этих запросов на сервер:
FORWARD -> 192.168.3.30Не самое красивое решение, но оно отлично работает для тестовой среды.
Comments