web-dev-qa-db-fra.com

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

J'exécute un service Web sur mon ordinateur local sous localhost:54722.

Je souhaite appeler le service à partir d'une application s'exécutant dans l'émulateur Android.

J'ai lu qu'en utilisant 10.0.2.2 dans l'application, on aurait accès à localhost, mais cela ne semble pas non plus fonctionner avec le numéro de port. Il dit HttpResponseException: Bad Request.

193
Robin

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

Ceci a été conçu de cette manière par l'équipe Android. Ainsi, votre serveur Web peut parfaitement fonctionner sur localhost et depuis 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. Avec l’émulateur ouvert, cliquez sur Plus dots , puis cliquez sur Paramètres et Proxy . À partir de là, vous pouvez définir vos propres paramètres de proxy HTTP. screen-shot for HTTP config

362
Akhil Jain

Utilisez 10.0.2.2 pour AVD par défaut et 10.0.3.2 pour Genymotion

51
Vinod Joshi

Si vous utilisez IIS Express, vous devrez peut-être vous connecter à tous les noms d'hôte au lieu de simplement "localhost". Cochez cette bonne réponse:

https://stackoverflow.com/a/15809698/383761

Dites à IIS Express de se lier à toutes les adresses IP et à tous les noms d'hôte. Dans votre fichier .config (généralement% userprofile%\Mes documents\IISExpress\config\applicationhost.config ou $ (solutionDir) .vs\config\applicationhost.config pour Visual Studio 2015), recherchez l'élément de liaison de votre site et ajoutez-le.

<binding protocol="http" bindingInformation="*:8080:*" />

Assurez-vous de l'ajouter en tant que deuxième liaison au lieu de modifier l'existant ou le VS ré-ajoutera simplement un nouveau site ajouté avec un (1) En outre, vous devrez peut-être exécuter VS en tant qu'administrateur.

14
Hugh Jeffner

J'ai rencontré le même problème lors de l'exécution d'une application Web par Visual Studio sur IIS Express. pour résoudre ce problème, vous devez accéder aux propriétés de votre projet, puis cliquer sur l'onglet Débogage et remplacer http: // localhost: [YOUR PORT] par http://127.0.0.1: [YOUR PORT] et définissez l’URL Android _ sur http://10.0.2.2: [VOTRE PORT]. cela a fonctionné pour moi.

11

Je l'ai résolu avec l'installation de "Conveyor by Keyoti" dans Visual Studio Professional 2015. Le convoyeur génère une adresse REMOTE (votre IP) avec un port (45455) permettant la requête externe. Exemple:

enter image description here

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

10
Ronny Morán

J'ai un serveur Web en cours d'exécution 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 votre adresse IP locale. En passant, votre HttpResponseException (Bad Request) ne signifie pas que l'hôte n'est pas accessible.

Certaines autres erreurs conduisent à cette exception.

8
Marco

Le problème est que l'émulateur Android mappe 10.0.2.2 à 127.0.0.1, not à localhost. Configurez donc votre serveur Web sur serveron 127.0.0.1:54722 et non localhost:54722. Ça devrait le faire.

7
Cobus Kruger

Après avoir exécuté votre hôte local, vous obtenez http://localhost:[port number]/ où vous avez trouvé votre numéro de port.

Ensuite, obtenez votre adresse IP à partir de la commande, ouvrez votre commande windows et tapez ipconfigenter image description here

Dans mon cas, IP étant 192.168.10.33, mon URL sera donc http://192.168.10.33: [port numéro] /. Sous Android, le studio utilise cette URL comme votre URL. Et après cela, définissez votre URL et votre numéro de port dans un proxy manuel pour l'émulateur.

enter image description here

3
Md Imran Choudhury

"BadRequest" est une erreur qui a généralement été envoyée par le serveur lui-même, voir RFC 2616

10.4.1 400 mauvaise demande

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

Donc, vous avez une connexion au serveur qui fonctionne, mais votre demande ne correspond pas à la forme 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.

Ici est 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.

3
Marvin Emil Brach

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

portNr = le port donné par ASP.NET Development Server, mon service actuel s'exécute sur localhost:3229/Service.svc

donc mon URL est 10.0.2.2:3229

j'aurais résolu mon problème de cette façon

j'espère que ça aide ...

3
lomec

Pour Laravel Utilisateurs de Homestead: Si vous utilisez Laravel avec Homestead, vous pouvez accéder à l'application dorsale à l'aide de 192.168.10.10 dans l'émulateur.

Ne fonctionne toujours pas? Une autre bonne solution consiste à utiliser ngrok https://ngrok.com/

1
Nomi

Comme 10.0.2.2 n'est pas 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 en tant que:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

Et pointez-le dans AndroidManifest.xml

<application
......
......
Android:networkSecurityConfig="@xml/network_security_config">
1
İsmail Yavuz

Je souhaite vous montrer comment accéder aux API Web IISExpress depuis mon émulateur Android. J'utilise Visual Studio 2015. Et j'appelle l'émulateur Android de Android Studio.

Tout ce que je dois faire est d’ajouter la ligne suivante à la configuration de liaison dans my applicationhost.config fichier

<binding protocol="http" bindingInformation="*:<your-port>:" />

Ensuite, je vérifie et utilise l'adresse IP4 pour accéder à mon API à partir de Android émulateur.

Condition: vous devez exécuter Visual Studio en tant qu'administrateur. Ce post donne un moyen parfait de le faire.

Pour plus de détails, s'il vous plaît visitez mon post sur github

J'espère que cela t'aides.

1
Nguyen Minh Hien

Requête incorrecte signifie généralement que le format des données que vous envoyez est incorrect. Peut être un mappage de données incompatible. Si vous obtenez une mauvaise requête, cela signifie que vous êtes capable de vous connecter au serveur, mais que la requête n'est pas envoyée correctement.

0
karthik

si vous utilisez un package tiers, tel que node express ou angular-cli, vous devez trouver l'adresse IP de votre machine et connecter votre hôte à cette adresse IP dans la configuration de démarrage du serveur (au lieu de localhost). Puis lancez-le à partir de l'émulateur en utilisant l'IP. Par exemple, je devais utiliser: ng serve -H 10.149.212.104 pour utiliser angular-cli. Ensuite, à partir de l'émulateur que j'ai utilisé: http://10.149.212.104:4200

0
Helzgate

J'ai résolu exactement le problème lorsque la couche de service utilise Visual Studio IIS Express. Il suffit de pointer sur 10.0.2.2: le port ne fonctionnera pas. Au lieu de déconner avec le IIS Express mentionné dans d'autres publications, je viens de placer un proxy devant le IIS Express. Par exemple, Apache ou nginx. Le fichier nginx.conf ressemblera à

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

    location / {
        proxy_pass http://localhost:54722;
    }
  }

Ensuite, le Android doit pointer sur mon adresse IP sous la forme 192.168.x.x: 8090

0
Denis Wang

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 que pour les autres solutions de cette question.

Après plusieurs heures de fouilles, j'ai constaté que si vous ajoutez un argument - write-system à la commande de démarrage de l'émulateur, les choses fonctionneront.

Vous devez démarrer un émulateur via la ligne de commande comme ci-dessous:

 emulator.exe -avd <emulator_name> -writable-system

Ensuite, dans votre émulateur, vous pouvez accéder à votre service d'API exécuté sur la machine hôte à l'aide de l'adresse IP du réseau local et du port de liaison:

http://192.168.1.2:<port>

J'espère que cela vous aide.

À propos de démarrer l'émulateur à partir de la ligne de commande: https://developer.Android.com/studio/run/emulator-commandline .

0
winiex

1) Exécuter la commande ipconfig dans cmd

2) Vous obtiendrez un résultat comme ceci enter image description here

3) Ensuite, utilisez l’adresse IPv4 de la carte réseau VMWare 1 suivie du numéro de port.

Dans My Case, c'est 8080, donc au lieu d'utiliser localhost: 8080

J'utilise 192.168.56.1:8080

enter image description here

Terminé.....

0
Ameya Salagre

Si quelqu'un cherche toujours cela, voici comment cela a fonctionné pour moi.

Vous devez trouver l'adresse IP de votre machine par rapport au périphérique/émulateur auquel vous êtes connecté. Pour les émulateurs, suivez les étapes ci-dessous.

  1. Allez à VM Boîte virtuelle -> sélectionnez le périphérique connecté dans la liste.
  2. Sélectionnez Paramètres -> Réseau -> Trouver le réseau auquel le périphérique est connecté. Pour moi, il s’agissait de "Carte Ethernet VirtualBox Host-Only Ethernet Adapter 2".
  3. Dans virtualbox, allez dans Fichiers-> Préférences-> Réseau-> Réseaux réservés aux hôtes, et recherchez l'IPv4 du réseau spécifié à l'étape ci-dessus. (En survolant vous obtiendrez l'info)

Fournissez cette adresse IP pour accéder à l'hôte local à partir de l'émulateur. Le port est identique à celui que vous avez fourni lors de l’exécution/publication de vos services.

Note n ° 1: Assurez-vous que vous avez pris soin des pare-feu et des règles entrantes.

Note # 2: Veuillez vérifier cette adresse IP après le redémarrage de votre ordinateur. Pour une raison quelconque, même si j’avais fourni "Utiliser l’IP suivante", l’adresse IP hôte uniquement a été modifiée.

0
skillworks

vous pouvez trouver l'adresse IP dont vous avez besoin dans le Gestionnaire des tâches de Windows (en appuyant sur Ctrl + Alt + Suppr) en la cherchant dans l'onglet "Performances". . .

0
elyar abad