Я запускаю веб-сервис на моей локальной машине, на котором работает localhost:54722
.
Я хочу вызвать сервис из приложения, запущенного в эмуляторе Android.
Я читал, что использование 10.0.2.2
в приложении получит доступ к localhost, но, похоже, оно не работает с номером порта. Это говорит HttpResponseException: Bad Request
.
Ответы:
Вы можете получить доступ к хост-машине с IP-адресом "
10.0.2.2
".Это было разработано таким образом командой Android. Таким образом, ваш веб-сервер может отлично работать на локальном хосте, а из вашего приложения для Android вы можете получить к нему доступ через "
http://10.0.2.2:<hostport>
".Если ваш эмулятор должен иметь доступ к Интернету через прокси-сервер, вы можете настроить собственный 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]. это сработало для меня.
источник
http://localhost:5000/
в Postman, так и в симуляторе iOS. Это решение работает для симулятора Android и не требует ни изменения моего сервера, ни настроек симулятора. Быстро, красиво и переносимо на другие компьютеры без лишней работы.Если вы используете IIS Express, вам может потребоваться привязать все имена хостов, а не просто `localhost '. Проверьте этот хороший ответ:
https://stackoverflow.com/a/15809698/383761
Убедитесь, что вы добавили его в качестве второй привязки, а не модифицировали существующую, или VS просто повторно добавит новый сайт, к которому добавлено также.
(1)
Также может потребоваться запустить VS как администратор.источник
Я решил это с помощью установки «Конвейер по Keyoti» в Visual Studio Professional 2015. Конвейер сгенерировал УДАЛЕННЫЙ адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:
Конвейер позволяет тестировать веб-приложения с внешних планшетов и телефонов в сети или с эмуляторов Android (без
http://10.0.2.2:<hostport>
)Шаги в следующей ссылке:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
источник
У меня есть веб-сервер, работающий на моем локальном хосте.
Если я открою эмулятор и захочу подключиться к своему локальному хосту, который я использую
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-адрес локальной сети и порт привязки:
Надеюсь, что это помогает вам.
О запуске эмулятора из командной строки: https://developer.android.com/studio/run/emulator-commandline .
источник
Чтобы получить доступ к localhost на Android Emulator
Добавьте интернет-разрешение от AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Добавить
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-адрес вашей машины относительно устройства / эмулятора, к которому вы подключены. Для эмуляторов одним из следующих способов является выполнение следующих шагов;
Укажите этот 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
источник
если вы используете какой-либо сторонний пакет, такой как node express или angular-cli, вам нужно будет найти IP-адрес вашего компьютера и подключить хост к этому IP-адресу в конфигурации запуска сервера (вместо localhost). Затем запустите его из эмулятора, используя IP. Например, мне пришлось использовать:
ng serve -H 10.149.212.104
использовать angular-cli. Затем из эмулятора я использовал:http://10.149.212.104:4200
источник
1) Запустите команду ipconfig в cmd
2) Вы получите такой результат
3) Затем используйте IPv4-адрес сетевого адаптера 1 VMWare, а затем номер порта.
В моем случае это 8080, поэтому вместо localhost: 8080
Я использую 192.168.56.1:8080
Готово.....
источник
Объяснение, почему
localhost
не доступно из эмуляторов для тех, кто имеет основные проблемы с доступом. Для сложных случаев читать другие ответы.Проблема: эмулятор имеет собственную локальную сеть и
localhost
сопоставляет себя с эмулятором , но НЕ с вашим хостом!Решение:
0.0.0.0
сделать его доступным для сети эмулятораifconfig
команда для Mac192.168.1.10
вместоlocalhost
источник
У меня была такая же проблема, когда я пытался подключиться к своему IIS .NET Webservice из эмулятора Android.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
на прокси IIS Express порт до 9000 и доступ к порту 9000 из эмулятора, как"http://10.0.2.2:9000"
причина в том, что по умолчанию IIS Express не разрешает подключения из сети https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + или + Web + App + с + через + LAN
источник