Доступ к localhost: порт из эмулятора Android
Я запускаю веб-сервис на моей локальной машине, на котором работает localhost:54722 .
Я хочу вызвать сервис из приложения, запущенного в эмуляторе Android.
Я читал, что использование 10.0.2.2 в приложении получит доступ к localhost, но, похоже, оно не работает с номером порта. Это говорит HttpResponseException: Bad Request .
Вы можете получить доступ к хост-машине с IP-адресом » 10.0.2.2 «.
Это было разработано таким образом командой Android. Таким образом, ваш веб-сервер может отлично работать на локальном хосте, а из вашего приложения для Android вы можете получить к нему доступ через » http://10.0.2.2: «.
Если ваш эмулятор должен иметь доступ к Интернету через прокси-сервер, вы можете настроить собственный HTTP-прокси с экрана расширенных элементов управления эмулятора. Открыв эмулятор, нажмите « Еще» , а затем « Настройки» и « Прокси» . Отсюда вы можете определить свои собственные настройки прокси HTTP.
Используйте 10.0.2.2 для AVD по умолчанию и 10.0.3.2 для Genymotion
Я столкнулся с той же проблемой при выполнении веб-приложения в IIS Express при выполнении Visual Studio. чтобы исправить это, вам нужно перейти в свойства вашего проекта, затем нажать на вкладку «Отладка» и изменить http: // localhost: [ВАШ ПОРТ] на http://127.0.0.1:[YOUR PORT] и установить URL-адрес андроида на http: / /10.0.2.2:[YOUR PORT]. это сработало для меня.
Если вы используете IIS Express, вам может потребоваться привязать все имена хостов, а не просто `localhost ‘. Проверьте этот хороший ответ:
Скажите IIS Express, чтобы он связывался со всеми IP-адресами и именами хостов. В своем файле .config (обычно% userprofile% \ My Documents \ IISExpress \ config \ applicationhost.config или $ (solutionDir) .vs \ config \ applicationhost.config для Visual Studio 2015) найдите элемент привязки вашего сайта и добавьте
Убедитесь, что вы добавили его в качестве второй привязки, а не модифицировали существующую, или VS просто повторно добавит новый сайт, к которому добавлено также. (1) Также может потребоваться запустить VS как администратор.
Я решил это с помощью установки «Конвейер по Keyoti» в Visual Studio Professional 2015. Конвейер сгенерировал УДАЛЕННЫЙ адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:
Конвейер позволяет тестировать веб-приложения с внешних планшетов и телефонов в сети или с эмуляторов Android (без http://10.0.2.2: )
Шаги в следующей ссылке:
У меня есть веб-сервер, работающий на моем локальном хосте.
Если я открою эмулятор и захочу подключиться к своему локальному хосту, который я использую 192.168.x.x . Это означает, что вы должны использовать свой локальный IP-адрес. Кстати, HttpResponseException (Bad Request) это не значит, что хост недоступен.
Некоторые другие ошибки приводят к этому исключению.
Поскольку 10.0.2.2 это не безопасный домен для Android, вы должны разрешить незащищенные домены в конфигурации вашей сети для API 28+, где не-TLS-соединения по умолчанию запрещены.
Вы можете использовать мои следующие конфигурации:
Создайте новый файл в main / res / xml / network_security_config.xml как:
И укажите это в AndroidManifest.xml
Проблема в том, что эмулятор Android отображается 10.0.2.2 на 127.0.0.1 , а не на localhost . Так что настраивайте свой веб-сервер на сервер, 127.0.0.1:54722 а не на localhost:54722 . Это должно сделать это.
После запуска вашего локального хоста вы попали http://localhost:[port number]/ сюда, вы нашли свой номер порта.
Затем получите свой IP-адрес от команды, откройте команду Windows и введите ipconfig
В моем случае IP был 192.168.10.33 таким, чтобы мой URL был http://192.168.10.33:[port number] /. В Android студия использует этот URL в качестве вашего URL. И после этого установите свой URL и номер порта в ручном прокси для эмулятора.
вам нужно установить URL как 10.0.2.2:portNr
portNr = указанный порт ASP.NET Development Server, на котором запущена моя текущая служба localhost:3229/Service.svc
так что мой URL 10.0.2.2:3229
я решил эту проблему таким образом
Я надеюсь, что это помогает.
«BadRequest» — это ошибка, которая обычно отправляется самим сервером, см. Rfc 2616
Сервер не может понять запрос из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.
Таким образом, у вас есть рабочее соединение с сервером, но ваш запрос не соответствует форме эксперта. Я не знаю, как вы создаете соединение, какие заголовки включены (если они есть) — но это то, что вы должны проверить.
Если вам нужна дополнительная помощь, объясните, о чем ваш код и что он использует для подключения к серверу, чтобы мы получили общую картину.
Вот вопрос с той же проблемой — ответ состоял в том, что в заголовке не был задан тип содержимого.
Я хотел бы показать вам способ доступа к веб-API IISExpress из моего эмулятора Android. Я использую Visual Studio 2015. И я вызываю эмулятор Android из Android Studio.
Все, что мне нужно сделать, это добавить следующую строку в конфигурацию привязки в моем файле applicationhost.config
Затем я проверяю и использую IP4-адрес для доступа к своему API из эмулятора Android.
Требование: вы должны запустить Visual Studio от имени администратора. Этот пост дает идеальный способ сделать это.
Для более подробной информации, пожалуйста, посетите мой пост на GitHub
Надеюсь это поможет.
Для пользователей Laravel Homestead: если кто-то использует Laravel вместе с hometead, вы можете получить доступ к бэкенду приложения, используя 192.168.10.10 в эмуляторе.
Все еще не работает? Еще одним хорошим решением является использование ngrok https://ngrok.com/
Я использую Windows 10 в качестве своей платформы разработки, доступ к 10.0.2.2:port в моем эмуляторе не работает должным образом, и такой же результат для других решений в этом вопросе.
После нескольких часов копания я обнаружил, что если вы добавите аргумент -writable-system в команду запуска эмулятора, все будет работать.
Вы должны запустить эмулятор через командную строку, как показано ниже:
Затем в эмуляторе вы можете получить доступ к службе API, работающей на хост-компьютере, используя IP-адрес локальной сети и порт привязки:
Надеюсь, что это помогает вам.
Чтобы получить доступ к localhost на Android Emulator
Добавьте интернет-разрешение от AndroidManifest.xml
Добавить android:usesCleartextTraffic=»true» , подробнее здесь :
Запустите указанную ниже команду, чтобы найти IP-адрес вашей системы:
Скопируйте IP-адрес, полученный на этом шаге (A)
Запустите ваше бэкэнд-приложение, к которому вы можете получить доступ в localhost или 127.0.0.1 из вашей системы.
Теперь в Android Studio вы можете заменить URL-адрес, если вы используете в коде, или вы можете использовать IP-адрес, полученный на шаге (A), и попробуйте открыть в веб-браузере, например, http://192.168.0.102:8080/
Не забудьте добавить PORT после IP-адреса, в моем случае приложение работало на порту 8080, поэтому я добавил IP, полученный в (A) с портом 8080
localhost, кажется, работал нормально в моем эмуляторе при запуске, а затем я начал получать исключение для соединения, я использовал 127.0.2.2 из браузера эмулятора, и это работало, и когда я использовал это в моем приложении для Android в эмуляторе, он снова начал показывать проблему отказа в соединении ,
тогда я сделал ifconfig и я использовал IP 192.168.2.2, и он работал отлично
Плохой запрос обычно означает, что формат отправляемых вами данных неверен. Может быть несоответствие отображения данных. Если вы получаете неверный запрос, это означает, что вы можете подключиться к серверу, но запрос отправляется неправильно.
Если кто-то все еще ищет это, вот как это сработало для меня.
Вам необходимо найти IP-адрес вашей машины относительно устройства / эмулятора, к которому вы подключены. Для эмуляторов одним из следующих способов является выполнение следующих шагов;
- Перейдите в окно VM Virtual -> выберите подключенное устройство в списке.
- Выберите Настройки -> Сеть -> Узнать, к какой сети подключено устройство. Для меня это был «VirtualBox Host-Only Ethernet Adapter # 2».
- В виртуальной коробке перейдите в Файлы-> Настройки-> Сеть-> Сети только для хоста и найдите IPv4 для сети, указанной в шаге выше. (При наведении вы получите информацию)
Укажите этот IP для доступа к локальному хосту из эмулятора. Порт такой же, какой вы указали при запуске / публикации ваших сервисов.
Примечание № 1: Убедитесь, что вы позаботились о брандмауэрах и правилах входящего трафика.
Примечание № 2: пожалуйста, проверьте этот IP после перезагрузки вашего компьютера. По какой-то причине, даже если я предоставил «Использовать следующий IP», IP-адрес только для хоста изменился.
Я точно решил проблему, когда сервисный уровень использует Visual Studio IIS Express. Просто укажите 10.0.2.2:port не будет работать. Вместо того, чтобы возиться с IIS Express, как упоминалось в других публикациях, я просто помещаю прокси-сервер перед IIS Express. Например, apache или nginx. Nginx.conf будет выглядеть так
Тогда андроид должен указать на мой IP-адрес как 192.168.xx: 8090
Источник
Как подключиться к моему веб-серверу http: // localhost из эмулятора Android
Что я могу сделать в эмуляторе Android, чтобы подключить его к моей странице веб-сервера localhost в http://localhost или http://127.0.0.1 ?
Я пробовал, но эмулятор по-прежнему принимает мой запрос, как поиск Google для localhost или, что еще хуже, говорит, что не нашел страницу, пока мой веб-сервер обычно работает.
14 ответов
Локальный хост относится к устройству, на котором выполняется код, в данном случае к эмулятору.
Если вы хотите обратиться к компьютеру, на котором запущен симулятор Android, используйте вместо него IP-адрес 10.0.2.2 .
Дополнительную информацию можно найти здесь.
Другой обходной путь — получить бесплатный домен с no-ip.org и указать его на свой локальный IP-адрес. Затем вместо использования http://localhost/yourwebservice вы можете попробовать http://yourdomain.no-ip.org/yourwebservice
Разрешение установки PWA
Прежде всего, установите мост отладки Android:
Запустите эмулятор Android как обычно, например:
Только после этого настройте обратный прокси на мосту эмулятора Android, который будет пересылать localhost HTTP-запросы к соответствующему порту (например, 8000) сервера localhost , запущенного на вашем главном компьютере, и наоборот:
Прогрессивное веб-приложение (PWA), обслуживаемое на localhost:8000 или 127.0.0.1:8000 можно будет установить и подключиться к своему service-worker.js . Принимая во внимание, что установка PWA не разрешена с IP-адреса 10.0.2.2 .
Предупреждение: adb reverse tcp:8000 tcp:8000 необходимо перевыпускать после каждого вызова эмулятора Android.
Следовательно, сценарий bash для запуска эмулятора Android с последующим обратным прокси-сервером будет выглядеть так:
Версия 10.0.2.2 создана для localhost базовой машины.
Номер порта такой же: 1521 менять не нужно
Абс у меня отлично работает ..
Если вы используете эмулятор Android:
Вы можете подключиться к локальному хосту вашего ПК по этим IP-адресам: 10.0.2.2:
Также вы можете использовать IP-адрес вашего сетевого адаптера. В CMD напишите ipconfig и найдите свой IP-адрес адаптера:
Если эмулятор не может подключиться к этим IP-адресам, закройте эмулятор и откройте его с помощью cold boot из AVD Manager:
Если вы используете Genymotion:
Вы можете подключиться к localhost машины по этому IP: 10.0.3.2:
Не знаю, возможно, эта тема уже решена, но когда я недавно попробовал сделать это на машине Windows, я столкнулся с множеством трудностей. Итак, мое решение было действительно простым. Я скачал эту программу http://www.lenzg.net/rinetd/rinetd.html следовали их инструкциям. о том, как сделать переадресацию портов, а затем успешно подключилось мое устройство Android для создания проекта asp.net localhost и остановилось на моем пределе.
Мой файл rinetd.conf:
Где 10.1.1.20 — это мой IP-адрес localhost, 82 и 1234 — мои порты. Также я создал файл для ванны, чтобы упростить жизнь yournameofbathfile.bat, поместите этот файл в папку rined. Моя папка для ванны:
После запуска этого программного обеспечения запустите сервер aps.net и попробуйте получить доступ с устройства Android или любого устройства в вашей локальной сети (например, компьютер ABC запускает шпатлевку), и вы увидите, что все работает. Не нужно переходить к настройке роутера или делать какие-то другие сложные вещи. Я надеюсь, что это поможет вам. Наслаждаться.
Если вы находитесь в Windows, вы можете перейти в систему simbol и написать ipconfig и проверить, какой IP-адрес назначен вашей машине.
Мне нужно было выяснить IP-адрес системного хоста для эмулятора «Nox App Player». Вот как я понял, что это 172.17.100.2 .
- Установленный эмулятор терминала Android из магазина приложений
- Выполните команду ip link show , чтобы показать все сетевые интерфейсы. Особый интерес вызвал интерфейс eth1.
- Команда Issue ifconfig eth1 показывает сеть как 172.17.100.15/255.255.255.0
- Начать пинг адресов, начинающихся с 172.17.100.1 , получено обращение к `172.17.100.2 ‘. Не уверен, будет ли мешать брандмауэр, но в моем случае этого не произошло.
Может быть, это поможет кому-то еще разобраться в других эмуляторах.
Источник