310 votes

Accès à localhost:port depuis l'émulateur Android

J'exécute un service web sur ma machine locale qui fonctionne à l'adresse suivante localhost:54722 .

Je veux appeler le service à partir d'une application fonctionnant dans l'émulateur Android.

J'ai lu qu'en utilisant 10.0.2.2 dans l'application permet d'accéder à localhost, mais cela ne semble pas fonctionner avec le numéro de port également. Il est écrit HttpResponseException: Bad Request .

0 votes

1 votes

Je m'attendais au comportement suivant : tous les ports ne sont pas transférés... 5555 n'est pas transféré mais 8080 et 8081 fonctionnent parfaitement...

0 votes

Vous devez modifier votre fichier de configuration vs-iis : stackoverflow.com/a/50991257/7149454

518voto

Akhil Jain Points 3352

Vous pouvez accéder à votre machine hôte avec l'adresse IP " 10.0.2.2 ".

Cela a été conçu de cette manière par l'équipe Android. Ainsi, votre serveur web peut parfaitement fonctionner sur l'hôte local et, à partir de votre application Android, vous pouvez y accéder via " http://10.0.2.2:<hostport> ".

Si votre émulateur doit accéder à Internet via un serveur proxy, vous pouvez configurer un proxy HTTP personnalisé à partir de l'écran Contrôles étendus de l'émulateur. Lorsque l'émulateur est ouvert, cliquez sur Plus de dots puis cliquez sur Paramètres y Proxy . À partir de là, vous pouvez définir vos propres paramètres de proxy HTTP. screen-shot for HTTP config

11 votes

Pourquoi le faire ? L'erreur Bad Request signifie que le serveur localhost est joignable, mais que la requête n'est pas tout à fait correcte

0 votes

Je ne suis pas sûr, je poursuis, que dites-vous exactement, est-ce pertinent pour la solution fournie ?

0 votes

Cela ne fonctionne pas pour moi pour le moment, mais voici le lien vers la documentation Android et il est clair que c'est ce qu'il faut faire (10.0.2.2) ; developer.Android.com/outils/appareils/emulateur.html

81voto

Vinod Joshi Points 294

Utilisez 10.0.2.2 pour l'AVD par défaut et 10.0.3.2 pour Genymotion.

6 votes

Pourquoi 10.0.3.2 pour Genymotion ?

2 votes

@Jacob Parce que Genymotion est un émulateur différent et qu'ils ont choisi d'utiliser une ip différente de celle de l'émulateur de google (Ce qui est à la limite de l'inutile. Sérieusement, quand vont-ils faire quelque chose à propos de leur horrible émulateur par défaut ?)

0 votes

Dans l'API 28+, vous devez également autoriser explicitement le trafic non-https (texte clair) dans votre configuration réseau. Voir ma réponse ci-dessous stackoverflow.com/a/56769746/2290369

11voto

FlyBy Points 509

J'ai un serveur web qui fonctionne sur mon hôte local.

Si j'ouvre l'émulateur et que je veux me connecter à mon hôte local, j'utilise 192.168.x.x . Cela signifie que vous devez utiliser l'adresse IP de votre réseau local. A propos, votre HttpResponseException (Bad Request) ne signifie pas que l'hôte n'est pas joignable.

D'autres erreurs conduisent à cette exception.

4voto

Marvin Emil Brach Points 2313

"BadRequest" est une erreur qui est généralement envoyée par le serveur lui-même, cf. rfc 2616

10.4.1 400 Bad Request

La demande n'a pas pu être comprise par le serveur en raison d'une syntaxe malformée. Le client NE DEVRAIT PAS répéter la demande sans modifications.

Vous avez donc réussi à établir une connexion avec le serveur, mais votre demande ne correspond pas à la forme souhaitée. Je ne sais pas comment vous créez la connexion, quels en-têtes sont inclus (s'il y en a) - mais c'est ce que vous devriez vérifier.

Si vous avez besoin de plus d'aide, expliquez-nous la nature de votre code et ce qu'il utilise pour se connecter au serveur, afin que nous ayons une vue d'ensemble.

Ici est une question avec le même problème - la réponse était que le content-type n'était pas défini dans l'en-tête.

0 votes

Tu as eu le bon point, mais tu as pris la mauvaise direction après. L'étape suivante devrait consister à analyser le serveur pour apprendre quel type de demandes lui importe, afin de comprendre pourquoi les demandes provenant des émulateurs reçoivent une réponse de 400. Une étude de cas pour IIS Express peut être trouvée ici, blog.lextudio.com/

4voto

lomec Points 889

Vous devez définir l'URL comme 10.0.2.2:portNr

portNr = le port donné par le serveur de développement ASP.NET, mon service actuel fonctionne sur localhost:3229/Service.svc

donc mon url est 10.0.2.2:3229

j'avais réglé mon problème de cette façon

J'espère que ça aidera...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X