J'exécute un service Web sur ma machine locale qui s'exécute sur localhost:54722
.
Je souhaite appeler le service à partir d'une application exécutée dans l'émulateur Android.
J'ai lu que l'utilisation 10.0.2.2
de l'application accéderait à localhost, mais cela ne semble pas fonctionner avec le numéro de port également. Ça dit HttpResponseException: Bad Request
.
Réponses:
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 localhost 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 des contrôles étendus de l'émulateur. Avec l'émulateur ouvert, cliquez sur Plus , puis sur Paramètres et proxy . À partir de là, vous pouvez définir vos propres paramètres de proxy HTTP.
la source
Utilisez 10.0.2.2 pour AVD par défaut et 10.0.3.2 pour Genymotion
la source
J'ai rencontré le même problème sur Visual Studio lors de l'exécution d'une application Web sur IIS Express. pour le corriger, vous devez aller dans les propriétés de votre projet, puis cliquez sur l'onglet Débogage et remplacez http: // localhost: [VOTRE PORT] par http://127.0.0.1:[YOUR PORT] et définissez l'url Android sur http: / /10.0.2.2:[VOTRE PORT]. ça a marché pour moi.
la source
http://localhost:5000/
à la fois dans le simulateur Postman et iOS. Cette solution fonctionne pour le simulateur Android et pas besoin de modifier mon serveur, ni aucun paramètre dans le simulateur. Rapide, agréable et portable sur d'autres ordinateurs sans travail supplémentaire.Si vous utilisez IIS Express, vous devrez peut-être vous lier à tous les noms d'hôtes au lieu de simplement `localhost '. Vérifiez cette bonne réponse:
https://stackoverflow.com/a/15809698/383761
Assurez-vous de l'ajouter en tant que deuxième liaison au lieu de modifier celle existante ou VS ajoutera simplement un nouveau site avec un
(1)
Aussi, vous devrez peut-être exécuter VS en tant qu'administrateur.la source
Je l'ai résolu avec l'installation de "Conveyor by Keyoti" dans Visual Studio Professional 2015. Conveyor génère une adresse REMOTE (votre IP) avec un port (45455) qui permet la requête externe. Exemple:
Conveyor vous permet de tester des applications Web à partir de tablettes et de téléphones externes sur votre réseau ou d'émulateurs Android (sans
http://10.0.2.2:<hostport>
)Les étapes sont dans le lien suivant:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
la source
J'ai un serveur Web en cours d'exécution sur mon hôte local.
Si j'ouvre l'émulateur et que je souhaite me connecter à mon hôte local que j'utilise
192.168.x.x
. Cela signifie que vous devez utiliser votre adresse IP de réseau local. Soit dit en passant, votreHttpResponseException (Bad Request)
ne signifie pas que l'hôte n'est pas accessible.D'autres erreurs entraînent cette exception.
la source
Étant donné qu'il
10.0.2.2
ne s'agit pas d'un domaine sécurisé pour Android, vous devez autoriser les domaines non sécurisés dans votre configuration réseau pour l'API 28+ où les connexions non TLS sont empêchées par défaut.Vous pouvez utiliser mes configurations suivantes:
Créez un nouveau fichier dans main / res / xml / network_security_config.xml comme:
Et pointez-le dans AndroidManifest.xml
la source
Le problème est que l'émulateur Android est mappé
10.0.2.2
sur127.0.0.1
, pas surlocalhost
. Configurez donc votre serveur Web sur serveron127.0.0.1:54722
et nonlocalhost:54722
. Ça devrait le faire.la source
Après avoir exécuté votre hôte local, vous arrivez
http://localhost:[port number]/
ici, vous avez trouvé votre numéro de port.Ensuite, obtenez votre adresse IP à partir de la commande, ouvrez votre commande Windows et tapez
ipconfig
Dans mon cas, IP était
192.168.10.33
donc mon URL sera http://192.168.10.33:: numéro de port] /. Sous Android, le studio utilise cette URL comme URL. Et après cela, définissez votre URL et votre numéro de port dans un proxy manuel pour l'émulateur.la source
vous devez définir l'URL comme
10.0.2.2:portNr
portNr =
le port donné par ASP.NET Development Server sur lequel mon service actuel s'exécutelocalhost:3229/Service.svc
donc mon URL est
10.0.2.2:3229
j'avais résolu mon problème de cette façon
j'espère que ça aide ...
la source
"BadRequest" est une erreur qui est généralement envoyée par le serveur lui-même, voir rfc 2616
Vous avez donc une connexion fonctionnelle avec le serveur, mais votre demande ne correspond pas au formulaire expecet. 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 d'aide supplémentaire, expliquez en quoi consiste votre code et ce qu'il utilise pour se connecter au serveur, afin d'avoir une vue d'ensemble.
Voici une question avec le même problème - la réponse était que le type de contenu n'était pas défini dans l'en-tête.
la source
Je voudrais vous montrer comment j'accède aux API Web IISExpress à partir de mon émulateur Android. J'utilise Visual Studio 2015. Et j'appelle l'émulateur Android depuis Android Studio.
Tout ce que je dois faire est d'ajouter la ligne suivante à la configuration de liaison dans mon applicationhost.config fichier
Ensuite, je vérifie et utilise l'adresse IP4 pour accéder à mon API à partir de l'émulateur Android
Condition: vous devez exécuter Visual Studio en tant qu'administrateur.Ce message donne un moyen parfait de le faire.
Pour plus de détails, veuillez visiter mon article sur github
J'espère que cela t'aides.
la source
Pour les utilisateurs de Laravel Homestead: Si quelqu'un utilise Laravel avec homestead, vous pouvez accéder au backend de l'application en utilisant 192.168.10.10 dans l'émulateur
Ne fonctionne toujours pas? Une autre bonne solution consiste à utiliser ngrok https://ngrok.com/
la source
J'utilise Windows 10 comme plate-forme de développement, l'accès à 10.0.2.2:port dans mon émulateur ne fonctionne pas comme prévu, et le même résultat pour les autres solutions de cette question également.
Après plusieurs heures de fouille, j'ai trouvé que si vous ajoutez -writable-system argument à la commande de démarrage de l'émulateur, les choses fonctionneront simplement.
Vous devez démarrer un émulateur via la ligne de commande comme ci-dessous:
Ensuite, dans votre émulateur, vous pouvez accéder à votre service API exécuté sur la machine hôte, en utilisant l'adresse IP LAN et le port de liaison:
J'espère que cela vous aidera.
À propos du démarrage de l'émulateur à partir de la ligne de commande: https://developer.android.com/studio/run/emulator-commandline .
la source
Pour accéder à localhost sur l'émulateur Android
Ajoutez l'autorisation Internet à partir d'AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Ajoutez
android:usesCleartextTraffic="true"
, plus de détails ici :Exécutez la commande mentionnée ci-dessous pour trouver votre adresse IP système:
Copiez l'adresse IP obtenue à partir de cette étape (A)
Exécutez votre application dorsale, à laquelle vous pouvez accéder depuis
localhost
ou127.0.0.1
depuis votre système.Maintenant, dans Android Studio, vous pouvez remplacer l'URL si vous utilisez du code ou vous pouvez utiliser l'adresse IP obtenue à l'étape (A) et essayer d'ouvrir dans le navigateur Web, comme ceci http://192.168.0.102:8080/
N'oubliez pas d'ajouter PORT après l'adresse IP, dans mon cas, l'application fonctionnait sur le port 8080, j'ai donc ajouté l'IP obtenue en (A) avec le port 8080
la source
localhost semblait bien fonctionner dans mon émulateur au début, puis j'ai commencé à obtenir une exception de connexion refusée J'ai utilisé 127.0.2.2 à partir du navigateur de l'émulateur et cela a fonctionné et quand j'ai utilisé cela dans mon application Android dans l'émulateur, il a recommencé à montrer le problème de connexion refusée .
alors j'ai fait ifconfig et j'ai utilisé l'ip 192.168.2.2 et cela a fonctionné parfaitement
la source
Une mauvaise demande signifie généralement que le format des données que vous envoyez est incorrect. Peut être un mappage de données non concordant. Si vous obtenez une mauvaise demande, cela signifie que vous pouvez vous connecter au serveur, mais la demande n'est pas envoyée correctement.
la source
Si quelqu'un cherche toujours cela, c'est comme ça que ça a fonctionné pour moi.
Vous devez trouver l'IP de votre machine par rapport au périphérique / émulateur auquel vous êtes connecté. Pour les émulateurs, vous devez suivre les étapes ci-dessous;
Fournissez cette adresse IP pour accéder à l'hôte local à partir de l'émulateur. Le port est le même que celui que vous avez fourni lors de l'exécution / publication de vos services.
Remarque n ° 1: assurez-vous d'avoir pris soin des pare-feu et des règles entrantes.
Remarque n ° 2: veuillez vérifier cette adresse IP après avoir redémarré votre ordinateur. Pour une raison quelconque, même si j'ai fourni "Utiliser l'adresse IP suivante", l'adresse IP hôte uniquement a été modifiée.
la source
J'ai résolu exactement le problème lorsque la couche de service utilise Visual Studio IIS Express. Il suffit de pointer vers 10.0.2.2:port ne fonctionnera pas. Au lieu de déconner avec IIS Express comme mentionné dans d'autres articles, je mets juste un proxy devant IIS Express. Par exemple, apache ou nginx. Le nginx.conf ressemblera à
Ensuite, l'android doit pointer vers mon adresse IP comme 192.168.xx: 8090
la source
si vous utilisez un package tiers comme node express ou angular-cli, vous devrez trouver l'IP de votre machine et attacher votre hôte à cette IP dans la configuration de démarrage du serveur (au lieu de localhost). Ensuite, lancez-le à partir de l'émulateur en utilisant l'IP. Par exemple, j'ai dû utiliser:
ng serve -H 10.149.212.104
pour utiliser le angular-cli. Puis à partir de l'émulateur que j'ai utilisé:http://10.149.212.104:4200
la source
1) Exécutez la commande ipconfig dans cmd
2) Vous obtiendrez un résultat comme celui-ci
3) Ensuite, utilisez l'adresse IPv4 de l'adaptateur réseau VMWare 1 suivie du numéro de port
Dans mon cas, son 8080, donc au lieu d'utiliser localhost: 8080
J'utilise 192.168.56.1:8080
Terminé.....
la source
Explication pourquoi
localhost
les émulateurs ne sont pas disponibles pour toute personne ayant un problème d'accès de base. Pour les cas sophistiqués, lisez les autres réponses.Problème: l' émulateur possède son propre réseau local et se
localhost
mappe à l' émulateur , mais PAS à votre hôte!Solution:
0.0.0.0
pour le rendre disponible pour le réseau de l'émulateurifconfig
commande pour Mac192.168.1.10
au lieu delocalhost
la source
J'ai eu le même problème lorsque j'essayais de me connecter à mon service Web IIS .NET à partir de l'émulateur Android.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
au proxy IIS express port vers 9000 et accéder au port 9000 à partir de l'émulateur comme"http://10.0.2.2:9000"
la raison semble être par défaut, IIS Express n'autorise pas les connexions depuis le réseau https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + ou + Web + App + de + à travers + LAN
la source