Ich führe einen Webdienst auf meinem lokalen Computer aus, auf dem ausgeführt wird localhost:54722
.
Ich möchte den Dienst von einer App aus aufrufen, die im Android-Emulator ausgeführt wird.
Ich habe gelesen, dass die Verwendung 10.0.2.2
in der App auf localhost zugreifen würde, aber es scheint auch nicht mit der Portnummer zu funktionieren. Es heißt HttpResponseException: Bad Request
.
Antworten:
Sie können mit der IP-Adresse "
10.0.2.2
" auf Ihren Host-Computer zugreifen .Dies wurde vom Android-Team auf diese Weise entworfen. So kann Ihr Webserver perfekt auf localhost ausgeführt werden und über Ihre Android-App können Sie über "
http://10.0.2.2:<hostport>
" darauf zugreifen .Wenn Ihr Emulator über einen Proxyserver auf das Internet zugreifen muss, können Sie einen benutzerdefinierten HTTP-Proxy über den Bildschirm Erweiterte Steuerelemente des Emulators konfigurieren. Klicken Sie bei geöffnetem Emulator auf Mehr und dann auf Einstellungen und Proxy . Von hier aus können Sie Ihre eigenen HTTP-Proxy-Einstellungen definieren.
quelle
Verwenden Sie 10.0.2.2 für Standard-AVD und 10.0.3.2 für Genymotion
quelle
Ich hatte das gleiche Problem mit Visual Studio beim Ausführen einer Webanwendung unter IIS Express. Um dies zu beheben, müssen Sie zu Ihren Projekteigenschaften gehen, dann auf die Registerkarte Debuggen klicken und http: // localhost: [IHR PORT] in http://127.0.0.1:[YOUR PORT] ändern und die Android-URL auf http: / setzen. /10.0.2.2:[IHR HAFEN ]. es hat bei mir funktioniert.
quelle
http://localhost:5000/
sowohl im Postman- als auch im iOS-Simulator darauf zu. Diese Lösung funktioniert für den Android-Simulator und muss weder meinen Server noch Einstellungen im Simulator ändern. Schnell, nett und portabel auf andere Computer ohne zusätzliche Arbeit.Wenn Sie IIS Express verwenden, müssen Sie möglicherweise an alle Hostnamen anstatt nur an "localhost" binden. Überprüfen Sie diese gute Antwort:
https://stackoverflow.com/a/15809698/383761
Stellen Sie sicher, dass Sie es als zweite Bindung hinzufügen, anstatt die vorhandene zu ändern. Andernfalls fügt VS einfach eine neue Site hinzu, an die ein angehängt
(1)
ist. Möglicherweise müssen Sie VS auch als Administrator ausführen.quelle
Ich habe es mit der Installation von "Conveyor by Keyoti" in Visual Studio Professional 2015 gelöst. Conveyor generiert eine REMOTE-Adresse (Ihre IP) mit einem Port (45455), der externe Anforderungen ermöglicht. Beispiel:
Mit Conveyor können Sie Webanwendungen von externen Tablets und Telefonen in Ihrem Netzwerk oder von Android-Emulatoren (ohne
http://10.0.2.2:<hostport>
) testen.Die Schritte befinden sich unter folgendem Link:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
quelle
Ich habe einen Webserver auf meinem lokalen Host.
Wenn ich den Emulator öffne und eine Verbindung zu meinem lokalen Host herstellen möchte, den ich verwende
192.168.x.x
. Dies bedeutet, dass Sie Ihre lokale LAN-IP-Adresse verwenden sollten. Das bedeutet übrigensHttpResponseException (Bad Request)
nicht, dass der Host nicht erreichbar ist.Einige andere Fehler führen zu dieser Ausnahme.
quelle
Da
10.0.2.2
es sich bei Android nicht um eine sichere Domain handelt, müssen Sie in Ihrer Netzwerkkonfiguration für API 28+ nicht gesicherte Domains zulassen, bei denen Nicht-TLS-Verbindungen standardmäßig verhindert werden.Sie können meine folgenden Konfigurationen verwenden:
Erstellen Sie eine neue Datei in main / res / xml / network_security_config.xml wie folgt:
Und zeigen Sie es in AndroidManifest.xml
quelle
Das Problem ist , dass der Android - Emulator Karten
10.0.2.2
zu127.0.0.1
, nicht zulocalhost
. Konfigurieren Sie Ihren Webserver also auf Serveron127.0.0.1:54722
und nicht auf Serveronlocalhost:54722
. Das sollte es tun.quelle
Nachdem Sie Ihren lokalen Host ausgeführt haben,
http://localhost:[port number]/
haben Sie hier Ihre Portnummer gefunden.Holen Sie sich dann Ihre IP-Adresse von Command, öffnen Sie Ihren Windows-Befehl und geben Sie ein
ipconfig
In meinem Fall war IP
192.168.10.33
so, dass meine URL http://192.168.10.33:[port number] / lautet . In Android verwendet das Studio diese URL als URL. Danach legen Sie Ihre URL und Ihre Portnummer im manuellen Proxy für den Emulator fest.quelle
Sie müssen die URL als festlegen
10.0.2.2:portNr
portNr =
Der von ASP.NET Development Server angegebene Port, auf dem mein aktueller Dienst ausgeführt wirdlocalhost:3229/Service.svc
so ist meine url
10.0.2.2:3229
Ich hatte mein Problem auf diese Weise behoben
Ich hoffe, es hilft...
quelle
"BadRequest" ist ein Fehler, der normalerweise vom Server selbst gesendet wurde, siehe RFC 2616
Sie haben also eine funktionierende Verbindung zum Server, aber Ihre Anfrage passt nicht zum erwarteten Formular. Ich weiß nicht, wie Sie die Verbindung herstellen, welche Header enthalten sind (falls vorhanden) - aber darauf sollten Sie achten.
Wenn Sie weitere Hilfe benötigen, erklären Sie, worum es in Ihrem Code geht und wie er eine Verbindung zum Server herstellt, damit wir das Gesamtbild haben.
Hier ist eine Frage mit demselben Problem - die Antwort war, dass der Inhaltstyp nicht in der Kopfzeile festgelegt wurde.
quelle
Ich möchte Ihnen zeigen, wie ich von meinem Android-Emulator aus auf IISExpress-Web-APIs zugreife. Ich verwende Visual Studio 2015. Und ich rufe den Android Emulator von Android Studio aus auf.
Ich muss lediglich die folgende Zeile zur Bindungskonfiguration in meiner Datei applicationhost.config hinzufügen
Dann überprüfe ich die IP4-Adresse und verwende sie, um vom Android-Emulator auf meine API zuzugreifen
Voraussetzung: Sie müssen Visual Studio als Administrator ausführen. Dieser Beitrag bietet eine perfekte Möglichkeit, dies zu tun.
Für weitere Informationen besuchen Sie bitte meinen Beitrag auf Github
Hoffe das hilft.
quelle
Für Laravel Homestead-Benutzer: Wenn jemand Laravel mit Homestead verwendet, können Sie mit 192.168.10.10 im Emulator auf das App-Backend zugreifen
Funktioniert immer noch nicht? Eine andere gute Lösung ist die Verwendung von ngrok https://ngrok.com/
quelle
Ich verwende Windows 10 als meine Entwicklungsplattform. Der Zugriff auf 10.0.2.2:port in meinem Emulator funktioniert nicht wie erwartet und das gleiche Ergebnis auch für andere Lösungen in dieser Frage.
Nach einigen Stunden des Grabens stellte ich fest, dass die Dinge einfach funktionieren , wenn Sie dem Startbefehl des Emulators das Argument -writable-system hinzufügen .
Sie müssen einen Emulator über die folgende Befehlszeile starten:
Anschließend können Sie in Ihrem Emulator mithilfe der LAN-IP-Adresse und des Bindungsports auf Ihren API-Dienst zugreifen, der auf dem Hostcomputer ausgeführt wird:
Hoffe das hilft dir weiter.
Informationen zum Starten des Emulators über die Befehlszeile: https://developer.android.com/studio/run/emulator-commandline .
quelle
Zugriff auf localhost über Android Emulator
Fügen Sie die Internetberechtigung von AndroidManifest.xml hinzu
<uses-permission android:name="android.permission.INTERNET" />
In
android:usesCleartextTraffic="true"
mehr Details hier :Führen Sie den folgenden Befehl aus, um die IP-Adresse Ihres Systems zu ermitteln:
Kopieren Sie die aus diesem Schritt erhaltene IP-Adresse (A).
Führen Sie Ihre Backend-Anwendung aus, auf die Sie über
localhost
oder127.0.0.1
von Ihrem System aus zugreifen können.Jetzt in Android Studio können Sie die URL ersetzen, wenn Sie Code verwenden, oder Sie können die IP-Adresse aus Schritt (A) verwenden und versuchen, sie im Webbrowser zu öffnen. Gefällt mir http://192.168.0.102:8080/
Vergessen Sie nicht, PORT nach der IP-Adresse hinzuzufügen. In meinem Fall wurde die App auf dem 8080-Port ausgeführt, sodass ich die in (A) erhaltene IP mit dem Port 8080 hinzugefügt habe
quelle
localhost schien beim Start in meinem Emulator einwandfrei zu funktionieren, und dann bekam ich die Ausnahme "Verbindung verweigert". Ich verwendete 127.0.2.2 vom Emulator-Browser und es funktionierte. Als ich dies in meiner Android-App im Emulator verwendete, wurde erneut das Problem "Verbindung verweigert" angezeigt .
dann habe ich ifconfig gemacht und ich habe die ip 192.168.2.2 benutzt und es hat perfekt funktioniert
quelle
Eine fehlerhafte Anfrage bedeutet im Allgemeinen, dass das Format der von Ihnen gesendeten Daten falsch ist. Möglicherweise stimmt die Datenzuordnung nicht überein. Wenn Sie eine schlechte Anfrage erhalten, bedeutet dies, dass Sie eine Verbindung zum Server herstellen können, die Anfrage jedoch nicht ordnungsgemäß gesendet wird.
quelle
Wenn noch jemand danach sucht, hat es bei mir so funktioniert.
Sie müssen die IP Ihres Computers in Bezug auf das Gerät / den Emulator ermitteln, mit dem Sie verbunden sind. Für Emulatoren ist der Weg durch Befolgen der folgenden Schritte;
Geben Sie diese IP an, um vom Emulator aus auf den lokalen Host zuzugreifen. Der Port ist derselbe, den Sie beim Ausführen / Veröffentlichen Ihrer Dienste angegeben haben.
Anmerkung 1 : Stellen Sie sicher, dass Sie sich um Firewalls und eingehende Regeln gekümmert haben.
Hinweis 2: Überprüfen Sie diese IP-Adresse, nachdem Sie Ihren Computer neu gestartet haben. Aus irgendeinem Grund wurde die Nur-Host-IP geändert, auch wenn ich "Folgende IP verwenden" angegeben habe.
quelle
Ich habe das Problem genau behoben, wenn die Serviceschicht Visual Studio IIS Express verwendet. Zeigen Sie einfach auf 10.0.2.2:port funktioniert nicht. Anstatt den IIS Express herumzuspielen, wie in anderen Beiträgen erwähnt, habe ich einfach einen Proxy vor den IIS Express gestellt. Zum Beispiel Apache oder Nginx. Die nginx.conf sieht so aus
Dann muss der Android auf meine IP-Adresse als 192.168.xx: 8090 zeigen
quelle
Wenn Sie ein Paket eines Drittanbieters wie Node Express oder Angular-CLI verwenden, müssen Sie die IP Ihres Computers ermitteln und Ihren Host in der Server-Startkonfiguration (anstelle von localhost) an diese IP anhängen. Starten Sie es dann über die IP vom Emulator. Zum Beispiel musste ich verwenden:
ng serve -H 10.149.212.104
um die Winkel-Cli zu verwenden. Dann habe ich vom Emulator Folgendes verwendet:http://10.149.212.104:4200
quelle
1) Führen Sie den Befehl ipconfig in cmd aus
2) Sie erhalten ein Ergebnis wie dieses
3) Verwenden Sie dann die IPv4-Adresse von VMWare Network Adapter 1, gefolgt von der Portnummer
In meinem Fall ist es 8080, also anstatt localhost zu verwenden: 8080
Ich verwende 192.168.56.1:8080
Getan.....
quelle
Erläuterung, warum
localhost
Emulatoren für Personen mit grundlegenden Zugriffsproblemen nicht verfügbar sind. Für anspruchsvolle Fälle lesen Sie andere Antworten.Problem: Der Emulator hat ein eigenes lokales Netzwerk und
localhost
ordnet sich dem Emulator zu , aber NICHT Ihrem Host!Lösung:
0.0.0.0
, um ihn für das Netzwerk des Emulators verfügbar zu machenifconfig
Befehl für Mac192.168.1.10
anstelle vonlocalhost
quelle
Ich hatte das gleiche Problem, als ich versuchte, über den Android-Emulator eine Verbindung zu meinem IIS .NET-Webservice herzustellen.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
Proxy IIS Express Port auf 9000 und Zugriff auf Port 9000 vom Emulator wie"http://10.0.2.2:9000"
Der Grund scheint standardmäßig zu sein: IIS Express erlaubt keine Verbindungen vom Netzwerk https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+wenn+zugriff auf +localhost+Web+ API + oder + Web + App + von + über + LAN
quelle