internet - Accediendo a localhost: puerto desde el emulador de Android
localhost android studio (17)
Estoy ejecutando un servicio web en mi máquina local que se ejecuta en localhost:54722
.
Quiero llamar al servicio desde una aplicación que se ejecuta en el emulador de Android.
Leí que usar 10.0.2.2
en la aplicación accedería a localhost, pero tampoco parece funcionar con el número de puerto. Dice HttpResponseException: Bad Request
.
"BadRequest" es un error que generalmente el servidor envía, vea rfc 2616
10.4.1 400 solicitud incorrecta
La solicitud no pudo ser entendida por el servidor debido a una sintaxis mal formada. El cliente NO DEBE repetir la solicitud sin modificaciones.
Entonces tienes una conexión funcional al servidor, pero tu solicitud no se ajusta al formulario de espera. No sé cómo se crea la conexión, qué encabezados se incluyen (si hay alguno), pero eso es lo que se debe verificar.
Si necesita más ayuda, explique de qué se trata su código y qué usa para conectarse al Servidor, de modo que tenemos una idea general.
Aquí hay una pregunta con el mismo problema: la respuesta fue que el tipo de contenido no se configuró en el encabezado.
El problema es que el emulador de Android asigna 10.0.2.2
a 127.0.0.1
, no a localhost
. Así que configure su servidor web en el servidor en 127.0.0.1:54722
y no localhost:54722
. Deberias hacer eso.
La mala solicitud generalmente significa que el formato de los datos que está enviando es incorrecto. Puede ser un mapeo de datos no coincidentes. Si recibe una solicitud incorrecta, implica que puede conectarse al servidor, pero la solicitud no se envía correctamente.
Lo resolví con la instalación de "Conveyor by Keyoti" en Visual Studio Professional 2015. Transportador genera una dirección REMOTA (su IP) con un puerto (45455) que habilita la solicitud externa. Ejemplo:
Conveyor le permite probar aplicaciones web desde tabletas y teléfonos externos en su red o desde emuladores de Android (sin http://10.0.2.2:<hostport>
)
Los pasos están en el siguiente enlace:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
Me enfrenté al mismo problema en Visual Studio al ejecutar una aplicación web en IIS Express. para solucionarlo, debe ir a las propiedades de su proyecto, luego hacer clic en Debug Tab y cambiar http: // localhost: [YOUR PORT] a http://127.0.0.1:[YOUR PORT] y configurar la url de Android en http: / /10.0.2.2:[SU PUERTO]. funcionó para mí.
Me gustaría mostrarte la forma en que accedo a las API web de IISExpress desde mi emulador de Android. Estoy usando Visual Studio 2015. Y llamo Android Emulator desde Android Studio.
Todo lo que tengo que hacer es agregar la siguiente línea a la configuración de enlace en mi archivo applicationhost.config
<binding protocol="http" bindingInformation="*:<your-port>:" />
Luego verifico y uso la dirección IP4 para acceder a mi API desde el emulador de Android
Requisito: debe ejecutar Visual Studio como administrador. Esta publicación ofrece una manera perfecta de hacer esto.
Para más detalles, visita mi publicación en github
Espero que esto ayude.
Para los usuarios de Laravel Homestead: si alguien utiliza Laravel con Homestead puede acceder al back-end de la aplicación usando 192.168.10.10 en emulador
Proporcione la dirección IP de su sistema que tiene internet en url. ej .: 190.168.1.90 me funciona
Resolví el problema exacto cuando la capa de servicio usa Visual Studio IIS Express. Simplemente apunte a 10.0.2.2:port no funcionará. En lugar de perder el IIS Express como se menciona en otras publicaciones, acabo de poner un proxy en el IIS Express. Por ejemplo, apache o nginx. El nginx.conf se verá como
# Mobile API
server {
listen 8090;
server_name default_server;
location / {
proxy_pass http://localhost:54722;
}
}
Entonces el android necesita apuntar a mi dirección IP como 192.168.xx: 8090
Si alguien todavía está buscando esto, así es como funcionó para mí.
Necesita encontrar la IP de su máquina con respecto al dispositivo / emulador que está conectado. Para los Emuladores en el camino es siguiendo los pasos a continuación;
- Vaya a la casilla Virtual de VM -> seleccione el dispositivo conectado en la lista.
- Seleccione Configuración -> Red -> Buscar a qué red está conectado el dispositivo. Para mí fue ''VirtualBox Host-Only Ethernet Adapter # 2''.
- En la caja virtual vaya a Archivos-> Preferencias-> Red-> Redes de solo-anfitrión, y descubra el IPv4 para la red especificada en el paso anterior. (Al pasar el cursor, obtendrá la información)
Proporcione esta IP para acceder al host local desde el emulador. El puerto es el mismo que proporcionó al ejecutar / publicar sus servicios.
Nota n. ° 1: asegúrese de haberse ocupado de los firewalls y las reglas de entrada.
Nota n. ° 2: verifique esta IP después de reiniciar su máquina. Por alguna razón, incluso si proporcioné "Usar la siguiente IP", la IP de solo host cambió.
Si está utilizando IIS Express, es posible que necesite enlazar a todos los nombres de host en lugar de solo `localhost ''. Verifique esta buena respuesta:
https://.com/a/15809698/383761
Indique a IIS Express que se enlace a todas las direcciones IP y nombres de host. En su archivo .config (generalmente% userprofile% / My Documents / IISExpress / config / applicationhost.config, o $ (dir_solución) .vs / config / applicationhost.config para Visual Studio 2015), busque el elemento de enlace de su sitio y añada
<binding protocol="http" bindingInformation="*:8080:*" />
Asegúrese de agregarlo como un segundo enlace en lugar de modificar el existente o VS simplemente volverá a agregar un nuevo sitio con un (1)
Además, es posible que deba ejecutar VS como administrador.
Si está utilizando un paquete de terceros como node express o angular-cli, necesitará encontrar la IP de su máquina y conectar su host a esa IP dentro de la configuración de inicio del servidor (en lugar de localhost). Luego, ábrelo desde el emulador usando la IP. Por ejemplo, tuve que usar: ng serve -H 10.149.212.104
para usar angular-cli. Luego, desde el emulador que utilicé: http://10.149.212.104:4200
Sin embargo, hay una solución mucho mejor. Puede acceder a su máquina host con la dirección IP " 10.0.2.2
".
Esto ha sido diseñado de esta manera por el equipo de Android. Por lo tanto, su servidor web puede ejecutarse perfectamente en localhost y desde su aplicación Android puede acceder a él a través de " http://10.0.2.2:<hostport>
".
Tengo un servidor web ejecutándose en mi servidor local.
Si abro el emulador y quiero conectarme a mi servidor local, estoy usando 192.168.xx
Esto significa que debe usar su dirección LAN local. Por cierto, su HttpResponseException (Bad Request)
no significa que el host no es alcanzable.
Algunos otros errores conducen a esta excepción.
Use 10.0.2.2 para AVD por defecto y 10.0.3.2 para Genymotion
localhost parecía estar funcionando bien en mi emulador al inicio y luego comencé a obtener conexión rechazada excepción usé 127.0.2.2 desde el navegador del emulador y funcionó y cuando lo usé en mi aplicación de Android en el emulador, nuevamente comenzó a mostrar el problema de conexión rechazada .
luego hice ifconfig y utilicé la ip 192.168.2.2 y funcionó perfectamente
necesitas configurar la URL como 10.0.2.2:portNr
portNr =
el puerto dado por ASP.NET Development Server mi servicio actual se está ejecutando en localhost:3229/Service.svc
entonces mi url es 10.0.2.2:3229
había arreglado mi problema de esta manera
Espero que ayude...