Estou executando um serviço da web na minha máquina local que é executada em localhost:54722
.
Quero chamar o serviço a partir de um aplicativo em execução no emulador do Android.
Eu li que o uso 10.0.2.2
no aplicativo acessaria o host local, mas também não parece funcionar com o número da porta. Diz HttpResponseException: Bad Request
.
Respostas:
Você pode acessar sua máquina host com o endereço IP "
10.0.2.2
".Isso foi projetado dessa maneira pela equipe do Android. Assim, seu servidor da Web pode funcionar perfeitamente no host local e, no seu aplicativo Android, você pode acessá-lo via "
http://10.0.2.2:<hostport>
".Se o seu emulador precisar acessar a Internet através de um servidor proxy, você poderá configurar um proxy HTTP personalizado na tela de controles Estendida do emulador. Com o emulador aberto, clique em Mais e clique em Configurações e Proxy . A partir daqui, você pode definir suas próprias configurações de proxy HTTP.
fonte
Use 10.0.2.2 para AVD padrão e 10.0.3.2 para Genymotion
fonte
Eu enfrentei o mesmo problema no Visual Studio executando um aplicativo Web no IIS Express. Para corrigi-lo, você precisa acessar as propriedades do projeto, clicar na guia Debug e alterar http: // localhost: [YOUR PORT] para http://127.0.0.1:[YOUR PORT] e defina o URL do Android como http: / /10.0.2.2:[Your PORT]. funcionou para mim.
fonte
http://localhost:5000/
simulador Postman e iOS. Esta solução funciona para o simulador Android e não há necessidade de modificar meu servidor, nem qualquer configuração no simulador. Rápido, agradável e portátil para outros computadores sem trabalho extra.Se você estiver usando o IIS Express, poderá ser necessário vincular a todos os nomes de host em vez de apenas `localhost '. Verifique esta boa resposta:
https://stackoverflow.com/a/15809698/383761
Certifique-se de adicioná-lo como uma segunda ligação, em vez de modificar o existente ou o VS apenas adicionará novamente um novo site anexado com um
(1)
Além disso, pode ser necessário executar o VS como administrador.fonte
Eu o resolvi com a instalação do "Conveyor by Keyoti" no Visual Studio Professional 2015. O transportador gera um endereço REMOTE (seu IP) com uma porta (45455) que permite solicitação externa. Exemplo:
O Transportador permite testar aplicativos da Web de tablets e telefones externos na sua rede ou de emuladores Android (sem
http://10.0.2.2:<hostport>
)As etapas estão no seguinte link:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
fonte
Eu tenho um servidor web rodando no meu host local.
Se eu abrir o emulador e quiser conectar-me ao meu host local, estou usando
192.168.x.x
. Isso significa que você deve usar seu endereço LAN local. A propósito, o seuHttpResponseException (Bad Request)
não significa que o host não esteja acessível.Alguns outros erros levam a essa exceção.
fonte
Como o
10.0.2.2
domínio não é seguro para o Android, é necessário permitir domínios não seguros na configuração de rede da API 28+, onde conexões não TLS são impedidas por padrão.Você pode usar as seguintes configurações:
Crie um novo arquivo em main / res / xml / network_security_config.xml como:
E aponte-o para AndroidManifest.xml
fonte
O problema é que o emulador do Android mapeia
10.0.2.2
para127.0.0.1
, e não paralocalhost
. Portanto, configure seu servidor web para serveron127.0.0.1:54722
e nãolocalhost:54722
. Isso deve resolver.fonte
Depois de executar o host local, você chegou
http://localhost:[port number]/
aqui e encontrou o número da porta.Em seguida, obtenha seu endereço IP em Comando, abra o comando Windows e digite
ipconfig
No meu caso, o IP era
192.168.10.33
assim, minha URL será http://192.168.10.33:[ número da porta ] /. No Android, o estúdio usa esse URL como seu URL. Depois disso, defina seu URL e número da porta no proxy manual do emulador.fonte
você precisa definir o URL como
10.0.2.2:portNr
portNr =
a porta fornecida pelo ASP.NET Development Server em que meu serviço atual está sendo executadolocalhost:3229/Service.svc
então meu url é
10.0.2.2:3229
eu consertei meu problema dessa maneira
Espero que ajude...
fonte
"BadRequest" é um erro que geralmente é enviado pelo próprio servidor, consulte rfc 2616
Então você tem uma conexão ativa com o servidor, mas sua solicitação não se encaixa no formulário expecet. Não sei como você cria a conexão, quais cabeçalhos estão incluídos (se houver) - mas é isso que você deve verificar.
Se você precisar de mais ajuda, explique sobre o que é seu código e o que ele usa para se conectar ao servidor, para que tenhamos uma visão geral.
Aqui está uma pergunta com o mesmo problema - a resposta foi que o tipo de conteúdo não foi definido no cabeçalho.
fonte
Gostaria de mostrar a você como acesso as APIs da Web IISExpress no meu Emulador do Android. Estou usando o Visual Studio 2015. E chamo o emulador do Android do Android Studio.
Tudo o que eu preciso fazer é adicionar a seguinte linha à configuração de ligação no meu arquivo applicationhost.config
Depois, verifico e uso o endereço IP4 para acessar minha API no emulador do Android
Requisito: você deve executar o Visual Studio como administrador. Este post fornece uma maneira perfeita de fazer isso.
Para mais detalhes, visite meu post no github
Espero que isto ajude.
fonte
Para usuários do Laravel Homestead: se alguém usando o Laravel com homestead, você pode acessar o back-end do aplicativo usando 192.168.10.10 no emulador
Ainda não funciona? Outra boa solução é usar o ngrok https://ngrok.com/
fonte
Estou usando o Windows 10 como minha plataforma de desenvolvimento, acessando 10.0.2.2:port no meu emulador não está funcionando conforme o esperado e o mesmo resultado para outras soluções nesta questão também.
Após várias horas de escavação, descobri que se você adicionar -writable-system argumento ao comando de inicialização do emulador, tudo funcionará.
Você precisa iniciar um emulador via linha de comando, como abaixo:
Em seu emulador, você pode acessar o serviço de API em execução na máquina host, usando o endereço IP da LAN e a porta de ligação:
Espero que isso ajude você.
Sobre o início do emulador na linha de comando: https://developer.android.com/studio/run/emulator-commandline .
fonte
Para acessar o host local no emulador do Android
Adicione a permissão da Internet no AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Adicione
android:usesCleartextTraffic="true"
, mais detalhes aqui :Execute o comando abaixo mencionado para encontrar o endereço IP do seu sistema:
Copie o endereço IP obtido nesta etapa (A)
Execute o aplicativo back-end, que você pode acessar no
localhost
ou a127.0.0.1
partir do seu sistema.Agora, no android studio, você pode substituir o URL se estiver usando o código ou o endereço IP obtido na etapa (A) e tentar abrir no navegador da Web, como este http://192.168.0.102:8080/
Não se esqueça de adicionar PORT após o endereço IP, no meu caso, o aplicativo estava sendo executado na porta 8080, então adicionei o IP obtido em (A) com a porta 8080
fonte
localhost parecia estar funcionando bem no meu emulador no início e, em seguida, comecei a receber a exceção recusada pela conexão, usei 127.0.2.2 no navegador emulador e funcionou e quando usei isso no meu aplicativo Android no emulador, ele novamente começou a mostrar o problema de conexão recusada .
então eu fiz ifconfig e usei o ip 192.168.2.2 e funcionou perfeitamente
fonte
Solicitação incorreta geralmente significa que o formato dos dados que você está enviando está incorreto. Pode ser um mapeamento de dados incompatível. Se você estiver recebendo uma solicitação incorreta, poderá conectar-se ao servidor, mas a solicitação não está sendo enviada corretamente.
fonte
Se alguém ainda está procurando por isso, é assim que funcionou para mim.
Você precisa encontrar o IP da sua máquina em relação ao dispositivo / emulador ao qual está conectado. Para os emuladores, o caminho é seguir as etapas abaixo;
Forneça esse IP para acessar o host local a partir do emulador. A porta é a mesma que você forneceu ao executar / publicar seus serviços.
Nota 1: verifique se você cuidou dos firewalls e das regras de entrada.
Nota 2: Verifique este IP depois de reiniciar sua máquina. Por algum motivo, mesmo que eu tenha fornecido "Usar o seguinte IP", o IP somente para host foi alterado.
fonte
Resolvi o problema exato quando a camada de serviço está usando o Visual Studio IIS Express. Basta apontar para 10.0.2.2:port não funcionará. Em vez de mexer no IIS Express, como mencionado em outras postagens, apenas coloquei um proxy na frente do IIS Express. Por exemplo, apache ou nginx. O nginx.conf terá a aparência de
Em seguida, o android precisa apontar para o meu endereço IP como 192.168.xx: 8090
fonte
se você estiver usando algum pacote de terceiros, como node express ou angular-cli, será necessário encontrar o IP da sua máquina e anexar seu host a esse IP na configuração de inicialização do servidor (em vez de localhost). Em seguida, inicie-o no emulador usando o IP. Por exemplo, eu tive que usar:
ng serve -H 10.149.212.104
usar o angular-cli. Então no emulador eu usei:http://10.149.212.104:4200
fonte
1) Execute o comando ipconfig no cmd
2) Você obterá resultados como este
3) Em seguida, use o endereço IPv4 do VMWare Network Adapter 1 seguido pelo número da porta
No meu caso, é 8080, então, em vez de usar localhost: 8080
Estou usando 192.168.56.1:8080
Feito.....
fonte
Explicação por que
localhost
não está disponível nos emuladores para quem tem um problema básico de acesso. Para casos sofisticados, leia outras respostas.Problema: O emulador possui rede local própria e
localhost
mapeia-se para o emulador , mas NÃO para o seu host!Solução:
0.0.0.0
disponibilizá-lo para a rede do emuladorifconfig
comando para Mac192.168.1.10
vez delocalhost
fonte
Eu tive o mesmo problema quando tentava me conectar ao meu serviço Web .NET do IIS a partir do emulador Android.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
para proxy porta expressa do IIS para 9000 e acessar a porta 9000 do emulador como"http://10.0.2.2:9000"
o motivo parece ser o padrão, o IIS Express não permite conexões da rede https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + ou + Web + App + de + na + LAN
fonte