Доступ к локальному хосту: порт с эмулятора Android
Я запускаю веб-службу на своей локальной машине, которая работает на localhost:54722
.
Я хочу вызвать службу из приложения, работающего в эмуляторе Android.
Я читал, что с помощью 10.0.2.2
в приложении будет доступ к localhost, но он, похоже, не работает с номером порта. В нем указано HttpResponseException: Bad Request
.
- 80070005 Доступ запрещается, когда сайт asp.net с кристальным отчетом развернут на выделенном сервере
- DDD - правило, что объекты не могут напрямую обращаться к репозиториям
- Ошибка Google Drive CSS / JS 404
- ASP MVC в IIS 7 приводит к: Ошибка HTTP 403.14 - Запрещено
- Сколько соединений сокетов может обрабатывать веб-сервер?
Однако есть гораздо лучшее решение. Вы можете получить доступ к своей главной машине с IP-адресом « 10.0.2.2
».
Это было разработано таким образом командой Android. Таким образом, ваш веб-сервер может отлично работать на локальном хосте и с вашего приложения для Android, вы можете получить к нему доступ через « http://10.0.2.2:
».
Используйте 10.0.2.2 для AVD по умолчанию и 10.0.3.2 для Genymotion
Если вы используете IIS Express, вам может потребоваться привязка ко всем именам хостов вместо «localhost». Проверьте этот прекрасный ответ:
https://stackoverflow.com/a/15809698/383761
Скажите, что сам 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. Конвейер создает REMOTE-адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:
Конвейер позволяет тестировать веб-приложения с внешних планшетов и телефонов в вашей сети или с эмуляторов Android (без http://10.0.2.2:
)
Шаги находятся в следующей ссылке:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
У меня есть веб-сервер, работающий на моем localhost.
Если я открою эмулятор и хочу подключиться к моему локальному хосту, я использую 192.168.xx
Это означает, что вы должны использовать свой локальный IP-адрес. Кстати, ваше HttpResponseException (Bad Request)
не означает, что хост недоступен.
Некоторые другие ошибки приводят к этому исключению.
Я столкнулся с той же проблемой в Visual Studio, выполняющей веб-приложение на IIS Express. Чтобы исправить это, вам нужно перейти к свойствам вашего проекта, затем щелкнуть вкладку «Отладка» и изменить http: // localhost: [ВАШ ПОРТ] на http://127.0.0.1:%5BYOUR PORT] и установить URL-адрес для Android по адресу http: / /10.0.2.2:[YOUR PORT]. это сработало для меня.
Проблема в том, что эмулятор Android отображает 10.0.2.2
до 127.0.0.1
, а не на localhost
. Поэтому настройте свой веб-сервер на serveron 127.0.0.1:54722
а не на localhost:54722
. Это должно сделать это.
«BadRequest» – это ошибка, которая обычно отправляется самим сервером, см. Rfc 2616
10.4.1 400 Плохой запрос
Запрос не мог быть понят сервером из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.
Таким образом, вы получили рабочее соединение с сервером, но ваш запрос не соответствует форме expecet. Я не знаю, как вы создаете соединение, какие заголовки включены (если они есть), но это то, что вы должны проверить.
Если вам нужна дополнительная помощь, объясните, что такое ваш код и что он использует для подключения к серверу, поэтому у нас есть большая картина.
Вот вопрос с одной и той же проблемой – ответ заключался в том, что тип содержимого не был установлен в заголовке.
вам нужно установить URL как 10.0.2.2:portNr
portNr =
данный порт от ASP.NET Development Server моя текущая служба запущена на localhost:3229/Service.svc
поэтому мой url 10.0.2.2:3229
я исправил свою проблему таким образом
Я надеюсь, что это помогает…
Я хотел бы показать вам, как я обращаюсь к IISExpress Web API из моего Android-эмулятора. Я использую Visual Studio 2015. И я вызываю Android-эмулятор Android из Android Studio.
Все, что мне нужно сделать, это добавить следующую строку в конфигурацию привязки в файле applicationhost.config
Затем я проверяю и использую IP4-адрес для доступа к моему API из эмулятора Android
Требование: вы должны запустить Visual Studio в качестве администратора. Это сообщение дает отличный способ сделать это.
Для получения дополнительной информации, пожалуйста, посетите мой пост на github
Надеюсь это поможет.
Для пользователей Laravel Homestead: если кто-либо использует Laravel с усадьбой, вы можете получить доступ к бэкэнд приложения, используя 192.168.10.10 в эмуляторе
Все еще не работает? Другим хорошим решением является использование ngrok https://ngrok.com/
localhost, казалось, работал нормально в моем эмуляторе при запуске, а затем я начал получать отказ от отказа, я использовал 127.0.2.2 из браузера эмулятора, и он работал, и когда я использовал это в своем приложении для Android в эмуляторе, он снова начал показывать отказ от отказа ,
то я сделал ifconfig, и я использовал ip 192.168.2.2, и он отлично работал
Плохой запрос обычно означает, что формат отправляемых данных неверен. Может быть несоответствие данных. Если вы получаете плохой запрос, вы можете подключиться к серверу, но запрос не отправляется должным образом.
Если кто-то все еще ищет это, так оно и работает для меня.
Вам необходимо найти IP-адрес вашего устройства в отношении подключенного устройства / эмулятора. Для Эмуляторов на пути, следуя ниже шаги;
- Перейдите в виртуальный ящик виртуальной машины -> выберите подключенное устройство в списке.
- Выберите «Настройки» -> «Сеть» – «Определите, к какой сети подключено устройство. Для меня это был «VirtualBox Host-Only Ethernet Adapter # 2».
- В Virtualbox перейдите в Files-> Preferences-> Network-> Host-Only Networks и узнайте IPv4 для сети, указанной выше. (Поворотом вы получите информацию)
Предоставьте этому IP-адресу доступ к локальному хосту из эмулятора. Порт такой же, как и при запуске / публикации ваших сервисов.
Примечание № 1: Убедитесь, что вы позаботились о брандмауэрах и правилах входа.
Примечание # 2: Пожалуйста, проверьте этот IP-адрес после перезагрузки компьютера. По какой-то причине даже если я предоставил «Использовать следующий IP-адрес», IP-адрес «Только хост» изменился.
Я решил точно решить проблему, когда уровень сервиса использует Visual Studio IIS Express. Просто укажите, что 10.0.2.2:port не будет работать. Вместо того, чтобы возиться с IIS Express, как упоминалось в других сообщениях, я просто поставил прокси-сервер перед IIS Express. Например, apache или nginx. Nginx.conf будет выглядеть так:
# Mobile API server { listen 8090; server_name default_server; location / { proxy_pass http://localhost:54722; } }
Затем андроид должен указывать на мой IP-адрес как 192.168.xx: 8090
если вы используете какой-либо сторонний пакет, например node express или angular-cli, вам нужно будет найти IP-адрес вашего компьютера и присоединить свой хост к этому IP-адресу в конфигурации запуска сервера (вместо localhost). Затем запустите его из эмулятора, используя IP. Например, мне пришлось использовать: ng serve -H 10.149.212.104
для использования углового cli. Затем из эмулятора я использовал: http://10.149.212.104:4200
1) Запустить команду ipconfig в cmd
2) Вы получите такой результат
3) Затем используйте адрес IPv4 сетевого адаптера VMWare 1, а затем номер порта
В моем случае его 8080, поэтому вместо использования localhost: 8080
Я использую 192.168.56.1:8080
Готово…..
Укажите IP-адрес вашей системы, имеющей интернет в URL-адресе. например: 190.168.1.90 это работает для меня