Доступ к локальному хосту: порт с эмулятора Android

Я запускаю веб-службу на своей локальной машине, которая работает на localhost:54722 .

Я хочу вызвать службу из приложения, работающего в эмуляторе Android.

Я читал, что с помощью 10.0.2.2 в приложении будет доступ к localhost, но он, похоже, не работает с номером порта. В нем указано HttpResponseException: Bad Request .

    Однако есть гораздо лучшее решение. Вы можете получить доступ к своей главной машине с 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-адрес вашего устройства в отношении подключенного устройства / эмулятора. Для Эмуляторов на пути, следуя ниже шаги;

    1. Перейдите в виртуальный ящик виртуальной машины -> выберите подключенное устройство в списке.
    2. Выберите «Настройки» -> «Сеть» – «Определите, к какой сети подключено устройство. Для меня это был «VirtualBox Host-Only Ethernet Adapter # 2».
    3. В 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 это работает для меня

    Давайте будем гением компьютера.