Korzystam z usługi internetowej na moim komputerze lokalnym, który działa na localhost:54722
.
Chcę zadzwonić do usługi z aplikacji uruchomionej w emulatorze Androida.
Przeczytałem, że użycie 10.0.2.2
w aplikacji może uzyskać dostęp do localhost, ale wydaje się, że nie działa również z numerem portu. To mówi HttpResponseException: Bad Request
.
android
android-emulator
localhost
port
Rudzik
źródło
źródło
Odpowiedzi:
Możesz uzyskać dostęp do komputera hosta za pomocą adresu IP „
10.0.2.2
”.Zostało to zaprojektowane w ten sposób przez zespół Androida. Dzięki temu Twój serwer może doskonale działać na localhost, a z aplikacji na Androida możesz uzyskać do niego dostęp za pośrednictwem „
http://10.0.2.2:<hostport>
”.Jeśli emulator musi mieć dostęp do Internetu za pośrednictwem serwera proxy, możesz skonfigurować niestandardowy serwer proxy HTTP na ekranie rozszerzonych kontrolek emulatora. Przy otwartym emulatorze kliknij opcję Więcej , a następnie kliknij opcję Ustawienia i serwer proxy . Tutaj możesz zdefiniować własne ustawienia proxy HTTP.
źródło
Użyj 10.0.2.2 dla domyślnego AVD i 10.0.3.2 dla Genymotion
źródło
Ten sam problem wystąpił w programie Visual Studio podczas uruchamiania aplikacji internetowej w IIS Express. aby to naprawić, musisz przejść do właściwości projektu, a następnie kliknąć kartę Debugowanie i zmienić http: // localhost: [TWÓJ PORT] na http://127.0.0.1:[YOUR PORT] i ustawić adres URL Androida na http: / /10.0.2.2:[YOUR PORT]. zadziałało dla mnie.
źródło
http://localhost:5000/
zarówno Postmana, jak i symulatora iOS. To rozwiązanie działa na symulatorze Androida i nie trzeba modyfikować mojego serwera ani żadnych ustawień w symulatorze. Szybki, ładny i przenośny na inne komputery bez dodatkowej pracy.Jeśli używasz IIS Express, być może będziesz musiał powiązać wszystkie nazwy hostów zamiast po prostu `localhost '. Sprawdź tę dobrą odpowiedź:
https://stackoverflow.com/a/15809698/383761
Pamiętaj, aby dodać go jako drugie powiązanie, zamiast modyfikować istniejący. W przeciwnym razie VS ponownie doda nową witrynę, do której dołączono
(1)
również. Może być konieczne uruchomienie VS jako administrator.źródło
Rozwiązałem go, instalując „Conveyor by Keyoti” w Visual Studio Professional 2015. Conveyor generuje adres REMOTE (twoje IP) za pomocą portu (45455), który umożliwia żądanie zewnętrzne. Przykład:
Conveyor pozwala testować aplikacje internetowe z zewnętrznych tabletów i telefonów w sieci lub z emulatorów Androida (bez
http://10.0.2.2:<hostport>
)Kroki znajdują się w następującym linku:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
źródło
Mam serwer WWW uruchomiony na moim lokalnym hoście.
Jeśli otworzę emulator i chcę połączyć się z lokalnym hostem, którego używam
192.168.x.x
. Oznacza to, że powinieneś używać lokalnego adresu LAN IP. Nawiasem mówiąc,HttpResponseException (Bad Request)
nie oznacza to, że host jest nieosiągalny.Niektóre inne błędy prowadzą do tego wyjątku.
źródło
Ponieważ
10.0.2.2
nie jest to bezpieczna domena dla Androida, musisz zezwolić na niezabezpieczone domeny w konfiguracji sieci dla API 28+, w których domyślnie uniemożliwia się połączenia inne niż TLS.Możesz użyć moich następujących konfiguracji:
Utwórz nowy plik w main / res / xml / network_security_config.xml jako:
I wskaż to w AndroidManifest.xml
źródło
Problem polega na tym, że emulator Androida odwzorowuje
10.0.2.2
na127.0.0.1
, a nie nalocalhost
. Więc skonfiguruj swój serwer WWW do serveron,127.0.0.1:54722
a nielocalhost:54722
. Że należy to zrobić.źródło
Po uruchomieniu lokalnego hosta znajdziesz
http://localhost:[port number]/
tutaj swój numer portu.Następnie uzyskaj adres IP z polecenia, otwórz polecenie systemu Windows i wpisz
ipconfig
W moim przypadku adres IP był
192.168.10.33
taki, że mój URL to http://192.168.10.33:[portport ] /. W systemie Android studio używa tego adresu URL jako adresu URL. Następnie ustaw adres URL i numer portu w ręcznym proxy dla emulatora.źródło
musisz ustawić URL jako
10.0.2.2:portNr
portNr =
podany port przez ASP.NET Development Server, na którym działa moja bieżąca usługalocalhost:3229/Service.svc
więc mój adres URL to
10.0.2.2:3229
w ten sposób naprawiłem swój problem
Mam nadzieję, że to pomoże...
źródło
„BadRequest” jest błędem, który zwykle jest wysyłany przez sam serwer, patrz rfc 2616
Masz więc działające połączenie z serwerem, ale twoje zapytanie nie pasuje do formularza expecet. Nie wiem, jak tworzysz połączenie, jakie nagłówki są uwzględniane (jeśli takie istnieją) - ale właśnie to powinieneś sprawdzić.
Jeśli potrzebujesz dodatkowej pomocy, wyjaśnij, na czym polega Twój kod i czego używa do łączenia się z serwerem, abyśmy mieli pełny obraz.
Oto pytanie z tym samym problemem - odpowiedź brzmiała, że typ treści nie został ustawiony w nagłówku.
źródło
Chciałbym pokazać, w jaki sposób uzyskuję dostęp do interfejsów API sieci Web IISExpress z mojego emulatora Androida. Używam Visual Studio 2015. I nazywam emulator Androida z Android Studio.
Wszystko, co muszę zrobić, to dodać następujący wiersz do konfiguracji wiązania w moim pliku applicationhost.config
Następnie sprawdzam i używam adresu IP4, aby uzyskać dostęp do mojego interfejsu API z emulatora Androida
Wymagania: musisz uruchomić Visual Studio jako Administrator. Ten post stanowi doskonały sposób na zrobienie tego.
Aby uzyskać więcej informacji, odwiedź mój post na github
Mam nadzieję że to pomoże.
źródło
Dla użytkowników Laravel Homestead: jeśli ktoś korzystający z Laravel z homestead, możesz uzyskać dostęp do wewnętrznej aplikacji za pomocą 192.168.10.10 w emulatorze
Wciąż nie działa? Innym dobrym rozwiązaniem jest użycie ngrok https://ngrok.com/
źródło
Używam systemu Windows 10 jako platformy programistycznej, dostęp do portu 10.0.2.2:port w emulatorze nie działa zgodnie z oczekiwaniami, a ten sam wynik również w przypadku innych rozwiązań w tym pytaniu.
Po kilku godzinach kopania odkryłem, że jeśli dodasz argument -writable-system do polecenia uruchamiania emulatora, wszystko po prostu zadziała.
Musisz uruchomić emulator za pomocą wiersza poleceń, jak poniżej:
Następnie w emulatorze możesz uzyskać dostęp do usługi API działającej na hoście, używając adresu IP LAN i portu wiązania:
Mam nadzieję, że to ci pomoże.
Informacje o uruchomieniu emulatora z wiersza poleceń: https://developer.android.com/studio/run/emulator-commandline .
źródło
Aby uzyskać dostęp do localhost na emulatorze Androida
Dodaj uprawnienie internetowe z AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Dodaj
android:usesCleartextTraffic="true"
, więcej szczegółów tutaj :Uruchom poniższe polecenie, aby znaleźć adres IP systemu:
Skopiuj adres IP uzyskany z tego kroku (A)
Uruchom aplikację zaplecza, do której możesz uzyskać dostęp z
localhost
lub127.0.0.1
z systemu.Teraz w Android Studio możesz zastąpić adres URL, jeśli używasz kodu lub Możesz użyć adresu IP uzyskanego w kroku (A) i spróbować otworzyć w przeglądarce internetowej, tak jak to http://192.168.0.102:8080/
Nie zapomnij dodać PORT po adresie IP, w moim przypadku aplikacja działała na porcie 8080, więc dodałem adres IP uzyskany w (A) z portem 8080
źródło
localhost wydawał się działać poprawnie w moim emulatorze na początku, a potem zacząłem dostawać odmowę połączenia wyjątek użyłem 127.0.2.2 z przeglądarki emulatora i zadziałało, a kiedy użyłem tego w mojej aplikacji na Androida w emulatorze, znów zaczął pokazywać problem z odmową połączenia .
potem zrobiłem ifconfig i użyłem IP 192.168.2.2 i działało idealnie
źródło
Złe żądanie oznacza ogólnie, że format wysyłanych danych jest nieprawidłowy. Może być niedopasowane mapowanie danych. Jeśli otrzymujesz złe żądanie, oznacza to, że możesz połączyć się z serwerem, ale żądanie nie zostało poprawnie wysłane.
źródło
Jeśli ktoś nadal tego szuka, tak to dla mnie działało.
Musisz znaleźć adres IP urządzenia w odniesieniu do podłączonego urządzenia / emulatora. W przypadku emulatorów należy wykonać następujące kroki;
Podaj ten adres IP, aby uzyskać dostęp do hosta lokalnego z emulatora. Port jest taki sam, jak podany podczas uruchamiania / publikowania usług.
Uwaga 1: Upewnij się, że zadbałeś o zapory ogniowe i reguły ruchu przychodzącego.
Uwaga 2: Sprawdź ten adres IP po ponownym uruchomieniu komputera. Z jakiegoś powodu, nawet jeśli podałem „Użyj następującego adresu IP”, adres IP hosta został zmieniony.
źródło
Dokładnie rozwiązałem problem, gdy warstwa usługi korzysta z programu Visual Studio IIS Express. Po prostu wskaż 10.0.2.2:port nie będzie działać. Zamiast bawić się w IIS Express, jak wspomniano w innych postach, po prostu umieściłem proxy przed IIS Express. Na przykład apache lub nginx. Będzie wyglądał plik nginx.conf
Następnie Android musi wskazać mój adres IP 192.168.xx: 8090
źródło
jeśli używasz jakiegoś pakietu innej firmy, takiego jak node express lub angular-cli, musisz znaleźć adres IP swojego komputera i dołączyć hosta do tego adresu IP w ramach konfiguracji uruchamiania serwera (zamiast localhost). Następnie uruchom go z emulatora za pomocą adresu IP. Na przykład musiałem użyć:
ng serve -H 10.149.212.104
do użycia kątowego-cli. Następnie z emulatora użyłem:http://10.149.212.104:4200
źródło
1) Uruchom polecenie ipconfig w cmd
2) Otrzymasz taki wynik
3) Następnie użyj adresu IPv4 karty sieciowej VMWare 1, a następnie numeru portu
W moim przypadku jest to 8080, więc zamiast używać localhost: 8080
Używam 192.168.56.1:8080
Gotowe.....
źródło
Wyjaśnienie, dlaczego
localhost
nie jest dostępne z emulatorów dla każdego, kto ma podstawowy problem z dostępem. W przypadku skomplikowanych przypadków przeczytaj inne odpowiedzi.Problem: Emulator ma własną sieć lokalną i
localhost
odwzorowuje się na emulatorze , ale NIE na twoim hoście!Rozwiązanie:
0.0.0.0
udostępnić go dla sieci emulatoraifconfig
polecenie dla komputerów Mac192.168.1.10
zamiastlocalhost
źródło
Miałem ten sam problem, gdy próbowałem połączyć się z moją usługą .NET Web Services IIS z emulatora Androida.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
do ekspresowego portu proxy IIS do 9000 i dostępu do portu 9000 z emulatora podobnego"http://10.0.2.2:9000"
przyczyną wydaje się być domyślnie, IIS Express nie zezwala na połączenia z sieci https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + lub + Web + App + od + przez + LAN
źródło