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 no parece funcionar también con el número de puerto. Dice HttpResponseException: Bad Request
.
Respuestas:
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 de Android puede acceder a través de "
http://10.0.2.2:<hostport>
".Si su emulador debe acceder a Internet a través de un servidor proxy, puede configurar un proxy HTTP personalizado desde la pantalla de controles extendidos del emulador. Con el emulador abierto, haga clic en Más y luego en Configuración y Proxy . Desde aquí, puede definir su propia configuración de proxy HTTP.
fuente
Use 10.0.2.2 para AVD predeterminado y 10.0.3.2 para Genymotion
fuente
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 y luego hacer clic en la pestaña Debug y cambiar http: // localhost: [YOUR PORT] a http://127.0.0.1:[YOUR PORT] y configure la URL de Android en http: / /10.0.2.2:[TU PUERTO]. Funcionó para mí.
fuente
http://localhost:5000/
simulador Postman y iOS. Esta solución funciona para el simulador de Android y no es necesario modificar mi servidor, ni ninguna configuración en el simulador. Rápido, agradable y portátil a otras computadoras sin trabajo adicional.Si está utilizando IIS Express, es posible que deba vincular todos los nombres de host en lugar de solo `localhost '. Mira esta buena respuesta:
https://stackoverflow.com/a/15809698/383761
Asegúrese de agregarlo como un segundo enlace en lugar de modificar el existente o VS simplemente volverá a agregar un nuevo sitio junto con un
(1)
Además, es posible que deba ejecutar VS como administrador.fuente
Lo resolví con la instalación de "Conveyor by Keyoti" en Visual Studio Professional 2015. El transportador genera una dirección REMOTA (su IP) con un puerto (45455) que permite 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
fuente
Tengo un servidor web ejecutándose en mi localhost.
Si abro el emulador y quiero conectarme a mi host local que estoy usando
192.168.x.x
. Esto significa que debe usar su dirección IP de LAN local. Por cierto, tuHttpResponseException (Bad Request)
no significa que el host no sea accesible.Algunos otros errores conducen a esta excepción.
fuente
Dado
10.0.2.2
que no es un dominio seguro para Android, debe permitir dominios no seguros en la configuración de su red para API 28+ donde las conexiones no TLS se impiden de forma predeterminada.Puede usar mis siguientes configuraciones:
Cree un nuevo archivo en main / res / xml / network_security_config.xml como:
Y apúntalo en AndroidManifest.xml
fuente
El problema es que el emulador de Android se asigna
10.0.2.2
a127.0.0.1
, no alocalhost
. Así que configure su servidor web para serveron127.0.0.1:54722
y nolocalhost:54722
. Deberias hacer eso.fuente
Después de ejecutar su host local, llega
http://localhost:[port number]/
aquí y encuentra su número de puerto.Luego obtenga su dirección IP del comando, abra el comando de Windows y escriba
ipconfig
En mi caso, la IP era
192.168.10.33
así que mi URL será http://192.168.10.33:[port number] /. En Android, el estudio usa esta URL como su URL. Y después de eso, configure su URL y su número de puerto en proxy manual para el emulador.fuente
necesitas configurar la URL como
10.0.2.2:portNr
portNr =
el puerto dado por el servidor de desarrollo ASP.NET en el que se ejecuta mi servicio actuallocalhost:3229/Service.svc
entonces mi url es
10.0.2.2:3229
Había solucionado mi problema de esta manera
Espero que ayude...
fuente
"BadRequest" es un error que generalmente el servidor mismo envió , consulte el rfc 2616
Así que tiene una conexión funcional con el servidor, pero su solicitud no se ajusta al formulario expecet. No sé cómo se crea la conexión, qué encabezados están incluidos (si hay alguno), pero eso es lo que debe verificar.
Si necesita más ayuda, explique de qué se trata su código y qué utiliza para conectarse al servidor, de modo que tengamos una idea general.
Aquí hay una pregunta con el mismo problema: la respuesta fue que el tipo de contenido no estaba configurado en el encabezado.
fuente
Me gustaría mostrarle la forma en que accedo a las API web IISExpress desde mi emulador de Android. Estoy usando Visual Studio 2015. Y llamo al emulador de Android desde Android Studio.
Todo lo que necesito hacer es agregar la siguiente línea a la configuración de enlace en mi archivo applicationhost.config
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, visite mi publicación en github
Espero que esto ayude.
fuente
Para usuarios de Laravel Homestead: si alguien usa Laravel con homestead, puede acceder al backend de la aplicación usando 192.168.10.10 en el emulador
¿Sigue sin funcionar? Otra buena solución es usar ngrok https://ngrok.com/
fuente
Estoy usando Windows 10 como mi plataforma de desarrollo, el acceso a 10.0.2.2:port en mi emulador no funciona como se esperaba, y el mismo resultado para otras soluciones también en esta pregunta.
Después de varias horas de excavación, descubrí que si agrega el argumento -writable-system al comando de inicio del emulador, las cosas simplemente funcionarán.
Tienes que iniciar un emulador a través de la línea de comando como a continuación:
Luego, en su emulador, puede acceder a su servicio API que se ejecuta en la máquina host, utilizando la dirección IP de LAN y el puerto de enlace:
Espero que esto te ayude.
Acerca del emulador de inicio desde la línea de comandos: https://developer.android.com/studio/run/emulator-commandline .
fuente
Para acceder a localhost en el emulador de Android
Agregue el permiso de internet de AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Añadir
android:usesCleartextTraffic="true"
, más detalles aquí :Ejecute el comando mencionado a continuación para encontrar la dirección IP de su sistema:
Copie la dirección IP obtenida de este paso (A)
Ejecute su aplicación de back-end, a la que puede acceder en
localhost
o127.0.0.1
desde su sistema.Ahora en Android Studio, puede reemplazar la URL si está usando un código o puede usar la dirección IP obtenida del paso (A) e intentar abrir en el navegador web, como esta http://192.168.0.102:8080/
No olvide agregar PUERTO después de la dirección IP, en mi caso la aplicación se estaba ejecutando en el puerto 8080, así que agregué la IP obtenida en (A) con el puerto 8080
fuente
localhost parecía estar funcionando bien en mi emulador al inicio y luego comencé a recibir la conexión denegada, utilicé 127.0.2.2 desde el navegador del emulador y funcionó, y cuando usé esto en mi aplicación de Android en el emulador, nuevamente comenzó a mostrar el problema de conexión rechazada .
luego hice ifconfig y usé la ip 192.168.2.2 y funcionó perfectamente
fuente
Solicitud incorrecta generalmente significa que el formato de los datos que está enviando es incorrecto. Puede ser una asignación de datos no coincidente. Si recibe una solicitud incorrecta, significa que puede conectarse al servidor, pero la solicitud no se envía correctamente.
fuente
Si alguien todavía está buscando esto, así es como funcionó para mí.
Debe encontrar la IP de su máquina con respecto al dispositivo / emulador al que está conectado. Para los emuladores, el camino es siguiendo los pasos a continuación;
Proporcione esta IP para acceder al localhost desde el emulador. El puerto es el mismo que ha proporcionado al ejecutar / publicar sus servicios.
Nota n. ° 1: asegúrese de haberse ocupado de los firewalls y las reglas de entrada.
Nota # 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ó.
fuente
Resolví exactamente el problema cuando la capa de servicio usa Visual Studio IIS Express. Solo apunta a 10.0.2.2:port no funcionará. En lugar de jugar con el IIS Express como lo mencionan otras publicaciones, simplemente puse un proxy frente al IIS Express. Por ejemplo, apache o nginx. El nginx.conf se verá así
Entonces, el Android necesita apuntar a mi dirección IP como 192.168.xx: 8090
fuente
si está utilizando algún 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 ejecútalo desde el emulador usando la IP. Por ejemplo, tuve que usar:
ng serve -H 10.149.212.104
para usar el angular-cli. Luego, desde el emulador utilicé:http://10.149.212.104:4200
fuente
1) Ejecute el comando ipconfig en cmd
2) Obtendrás un resultado como este
3) Luego use la dirección IPv4 del adaptador de red VMWare 1 seguido del número de puerto
En mi caso es 8080, así que en lugar de usar localhost: 8080
Estoy usando 192.168.56.1:8080
Hecho.....
fuente
Explicación de por qué
localhost
no está disponible en los emuladores para cualquier persona que tenga un problema de acceso básico. Para casos sofisticados, lea otras respuestas.Problema: el emulador tiene su propia red local y se
localhost
asigna al emulador , ¡pero NO a su host!Solución:
0.0.0.0
que esté disponible para la red del emuladorifconfig
comando para Mac192.168.1.10
lugar delocalhost
fuente
Tuve el mismo problema cuando intentaba conectarme a mi servicio web IIS .NET desde el emulador de Android.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
al proxy IIS express port a 9000 y acceda al puerto 9000 desde el emulador como"http://10.0.2.2:9000"
la razón parece ser por defecto, IIS Express no permite conexiones desde la red https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + o + Aplicación + web + desde + a través de + LAN
fuente