Localhost'a erişim: Android emülatöründen bağlantı noktası


224

Yerel makinemde çalışan bir web hizmeti çalıştırıyorum localhost:54722.

Hizmeti Android öykünücüsünde çalışan bir uygulamadan aramak istiyorum.

Ben 10.0.2.2app kullanarak localhost erişeceğini okudum , ama aynı zamanda bağlantı noktası numarası ile çalışmak gibi görünmüyor. Diyor HttpResponseException: Bad Request.



1
Davranışları bekliyordum, tüm portlar yönlendirilmedi ... 5555 iletilmedi, ancak 8080 ve 8081 gayet iyi çalıştı ...
Florian Loch

Vs-iis yapılandırma dosyanızı düzenlemeniz gerekir: stackoverflow.com/a/50991257/7149454
Nick Kovalsky

Yanıtlar:


408

Ana makinenize " 10.0.2.2" IP adresiyle erişebilirsiniz .

Bu, Android ekibi tarafından bu şekilde tasarlanmıştır. Böylece web sunucunuz localhost'ta mükemmel bir şekilde çalışabilir ve Android uygulamanızdan " http://10.0.2.2:<hostport>" üzerinden erişebilirsiniz .

Öykünücünüzün bir proxy sunucusu üzerinden internete erişmesi gerekiyorsa, öykünücünün Genişletilmiş denetimler ekranından özel bir HTTP proxy yapılandırabilirsiniz. Öykünücü açıkken Diğer'i noktalar ve ardından Ayarlar ve Proxy'yi tıklatın . Buradan kendi HTTP proxy ayarlarınızı tanımlayabilirsiniz. HTTP yapılandırması için ekran görüntüsü


9
Neden olsun ki? Localhost sunucu erişilebilir olduğundan, fakat bu talep .. çok doğru olmadığını hatası Hatalı İstek araçları
Dediqated

emin değilim, ben takip, tam olarak ne diyorsun, sağlanan çözüm ile ilgili mi ??
Akhil Jain

Şu anda benim için çalışmıyor, ancak Android belgelerine bağlantı var ve bunu yapması gereken şey bu (10.0.2.2); developer.android.com/tools/devices/emulator.html
Stuart Hallows

23
açıkçası bu hiçbir şeyi açıklığa kavuşturmuyor, Robin zaten 10.0.2.2 ip kullanıyor ve çalışmıyor. Cevabınız doğru olmasına rağmen, bir çözüm SAĞLAMAZ.
iversoncru

Ben de aynı çözümle 400: Kötü istek hatası alıyorum.
Keval Patel

55

Varsayılan AVD için 10.0.2.2 ve Genymotion için 10.0.3.2 kullanın


4
Neden Genymotion için 10.0.3.2?
Jacob

1
@Jacob Çünkü Genymotion farklı bir emülatör ve google'ın emülatöründen farklı bir ip kullanmayı seçtiler (Hangi işe yaramaz sınırlar. Cidden, korkunç varsayılan emülatörleri hakkında ne zaman bir şeyler yapacaklar?)
Computrius

API 28+ sürümünde, ağ yapılandırmanızda https dışı (açık metin) trafiğe de açıkça izin vermelisiniz. Cevabımı aşağıda görebilirsiniz stackoverflow.com/a/56769746/2290369
İsmail Yavuz

20

Aynı sorun, Visual Studio'da IIS Express'te bir web uygulaması yürütürken de karşılaştım. Bunu düzeltmek için proje özelliklerinize gitmeniz ve ardından Hata Ayıklama Sekmesine tıklamanız ve http: // localhost: [SİZİN LİMANI] ' nı http://127.0.0.1:[YOLUN BAĞLANTISI] olarak değiştirmeniz ve android url'sini http: / olarak ayarlamanız gerekir. /10.0.2.2:[PORTUNUZ ]. benim için çalıştı.


1
10.0.0.2 url ile birlikte bu benim için çözdü. Bu ayar başka bir yerde açıklanan hosting.json yaklaşımını geçersiz kılıyor gibiydi.
user761574

1
MacOS üzerinde yerel olarak django sunucusu çalıştırıyorum ve genellikle http://localhost:5000/Postman ve iOS simülatöründen erişiyorum . Bu çözüm Android simülatörü için çalışır ve sunucumu veya simülatördeki ayarları değiştirmeye gerek yoktur. Ekstra çalışma olmadan diğer bilgisayarlara hızlı, güzel ve taşınabilir.
John Pang

Her ikisi de VS kullanarak xamarin ve ASP.NET Web API'leri ile Android uygulaması. ÇALIŞTI! Teşekkürler!!
sohaib

15

IIS Express kullanıyorsanız, yalnızca yerel ana bilgisayar yerine tüm ana bilgisayar adlarına bağlanmanız gerekebilir. Bu hassas yanıtı kontrol edin:

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

IIS Express'ten kendisine tüm IP adreslerine ve ana bilgisayar adlarına bağlanmasını söyleyin. .Config dosyanızda (genellikle% userprofile% \ Belgelerim \ IISExpress \ config \ applicationhost.config veya $ (solutionDir) .vs \ config \ applicationhost.config, Visual Studio 2015 için) ve sitenizin bağlayıcı öğesini bulun ve ekleyin

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

Mevcut olanı değiştirmek yerine ikinci bir bağlayıcı olarak eklediğinizden emin olun, yoksa VS, A ile eklenen yeni bir siteyi yeniden ekler. (1) Ayrıca, VS'yi yönetici olarak çalıştırmanız gerekebilir.


Hayır, her zaman boş ana bilgisayar adı kullanmanıza gerek yoktur, blog.lextudio.com/…
Lex Li

<bağlama protokolü = "http" bağlamaInformation = "*: 15000: 127.0.0.1" /> IIS Express'in 15000 bağlantı noktasım olduğu yerde sevdiği ve sonra android emülatöründe 10.0.2.2:15000'i işaret ettiği şekilde
dpineda

11

Visual Studio Professional 2015'te "Keyoti by Conveyor" kurulumu ile çözdüm. Konveyör, harici talebi etkinleştiren bir port (45455) ile bir UZAKTAN adresi (IP'niz) oluşturur. Misal:

resim açıklamasını buraya girin

Konveyör, ağınızdaki harici tabletlerden ve telefonlardan veya Android emülatörlerinden web uygulamalarını ( http://10.0.2.2:<hostport> )

Adımlar aşağıdaki bağlantıdadır:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti


Web sunucusunu Visual Studio'da çalıştırmazsanız ne olur? Imo, bu sorunun cevabı değil.
jAC

Deniyorum ama birkaç gün sonra verilen URL çalışmıyor ve herhangi bir çözüm bulamıyorum.
Md Imran Choudhury

Uzun bir mücadeleden sonra hile yapan tek şey bu uzantıyı yüklemek ve Uzak URL özelliğini etkinleştirmekti. İsteğin API'ya ulaşması biraz daha uzun sürüyor, ancak çalışıyor.
fabian278

9

Yerel ana bilgisayarımda çalışan bir web sunucum var.

Öykünücüyü açar ve localhost'uma bağlanmak istersem kullanıyorum 192.168.x.x. Bu, yerel lan ip adresinizi kullanmanız gerektiği anlamına gelir. Bu arada,HttpResponseException (Bad Request) barındırıcınıza ulaşılamayacağı anlamına gelmez.

Diğer bazı hatalar bu istisnayı beraberinde getirir.


9

Dan beri 10.0.2.2 olmayan TLS bağlantıları varsayılan olarak engellenir API 28+ için ağ yapılandırması olmayan güvenli alanlar izin vermek zorunda Android için güvenli bir alan değildir.

Aşağıdaki yapılandırmalarımı kullanabilirsiniz:

Main / res / xml / network_security_config.xml dosyasında yeni bir dosya oluşturun:

<?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>

Ve AndroidManifest.xml'de işaretleyin

<application
......
......
android:networkSecurityConfig="@xml/network_security_config">

8

Sorun Android emülatörü eşler olmasıdır 10.0.2.2için 127.0.0.1, değil için localhost. Bu yüzden web sunucunuzu servise 127.0.0.1:54722değil yapılandırmaya ayarlayın localhost:54722. Bunu yapmalı.


7

Yerel ana makinenizi çalıştırdıktan sonra http://localhost:[port number]/bağlantı noktası numaranızı buldunuz.

Sonra IP adresinizi Komut'tan alın, Windows komutunuzu açın ve yazın ipconfig resim açıklamasını buraya girin

Benim durumumda IP, 192.168.10.33URL'm http://192.168.10.33:[port numarası] / olacaktı. Android'de stüdyo bu URL'yi URL'niz olarak kullanır. Bundan sonra emülatör için manuel proxy'de URL'nizi ve bağlantı noktası numaranızı ayarlayın.

resim açıklamasını buraya girin


3

URL'yi şu şekilde ayarlamanız gerekir: 10.0.2.2:portNr

portNr = ASP.NET Development Server tarafından verilen bağlantı noktası şu anki hizmetim üzerinde çalışıyor localhost:3229/Service.svc

benim url'im 10.0.2.2:3229

sorunumu bu şekilde giderdim

Umut ediyorum bu yardım eder...


3

"BadRequest" genellikle sunucunun kendisi tarafından gönderilen bir hatadır, bkz. Rfc 2616

10.4.1 400 Hatalı İstek

İstek, hatalı biçimlendirilmiş sözdizimi nedeniyle sunucu tarafından anlaşılamadı. İstemci, değişiklik yapmadan isteği tekrarlamamalıdır.

Böylece sunucuyla çalışan bir bağlantınız var, ancak isteğiniz bütçe formuna uymuyor. Bağlantıyı nasıl oluşturduğunuzu bilmiyorum, (eğer varsa) hangi başlıklar dahil - ama ne kontrol etmelisiniz.

Hakkında daha fazla yardıma ihtiyacınız varsa, kodunuzun ne hakkında olduğunu ve Sunucuya bağlanmak için ne kullandığını açıklayın, böylece büyük resmimiz var.

İşte aynı Soruna sahip bir soru - cevap, başlıkta içerik türü ayarlanmadığıydı.


Doğru noktayı buldunuz, ancak daha sonra yanlış yöne gittiniz. Bir sonraki adım, emülatörlerden gelen isteklerin neden 400 ile yanıtlandığını anlamak için sunucunun ne tür isteklere önem verdiğini öğrenmek için analiz edilmesi olmalıdır. IIS Express için bir örnek olay burada bulunabilir, blog.lextudio.com/…
Lex Li

1

Android Emulator'umdan IISExpress Web API'lerine erişme şeklimizi göstermek istiyorum. Visual Studio 2015 kullanıyorum. Ve Android Studio'dan Android Emulator'u çağırıyorum.

Yapmam gereken tek şey applicationhost.config dosyasındaki bağlayıcı yapılandırmasına aşağıdaki satırı eklemek.

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

Sonra Android emülatöründen API'ma erişmek için IP4 Adresini kontrol edip kullanıyorum

Gereksinim: Visual Studio'yu Yönetici olarak çalıştırmalısınız. Bu yazı bunu yapmak için mükemmel bir yol sunuyor.

Daha fazla ayrıntı için lütfen benim yazı github

Bu yardımcı olur umarım.


2
Veya Uzantılar penceresinden Konveyör adlı ücretsiz VS Uzantısını yükleyin. Bu, yapılandırmayı değiştirmeden IIS Express'i dış isteklere açar.
Jim W, Monica'nın

VS'yi yönetici olarak çalıştırmaktan başka blog.lextudio.com/… seçenekleriniz var . Bu yüzden buna bir zorunluluk demeyeceğim .
Lex Li

1

Laravel Homestead Kullanıcıları için: Laravel'i homestead kullanan herkes emülatörde 192.168.10.10 kullanarak uygulama arka ucuna erişebilirsiniz

Hala çalışmıyor? Başka bir iyi çözüm ngrok kullanmaktır https://ngrok.com/


1

Windows 10'u geliştirme platformum olarak kullanıyorum, emülatörümde 10.0.2.2:port'a erişmek beklendiği gibi çalışmıyor ve bu sorudaki diğer çözümler için de aynı sonuç.

Birkaç saat kazdıktan sonra, öykünücü başlatma komutuna -writable-system argümanı eklerseniz , işlerin işe yarayacağını buldum .

Aşağıdaki gibi komut satırı üzerinden bir emülatör başlatmanız gerekir:

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

Ardından taklitçinizde, ana makinede çalışan API hizmetinize LAN IP adresini ve bağlayıcı bağlantı noktasını kullanarak erişebilirsiniz:

http://192.168.1.2:<port>

Umarım bu size yardımcı olur.

Emülatörünü komut satırından başlatma hakkında: https://developer.android.com/studio/run/emulator-commandline .


1

Android Emulator'da localhost'a erişmek için

  • AndroidManifest.xml'den internet izni ekleyin
    <uses-permission android:name="android.permission.INTERNET" />

  • android:usesCleartextTraffic="true"Daha fazla ayrıntıyı buraya ekleyin :

  • Sistem IP adresinizi bulmak için aşağıda belirtilen komutu çalıştırın:

ifconfig | grep "inet " | grep -v 127.0.0.1

Bu adımdan elde edilen IP adresini kopyalayın (A)

  • Sisteminizden localhostveya 127.0.0.1sisteminizden erişebileceğiniz arka uç uygulamanızı çalıştırın .

  • Şimdi android stüdyoda, kodda kullanıyorsanız URL'yi değiştirebilir veya (A) adımından elde edilen ip adresini kullanabilir ve web tarayıcısında açmayı deneyebilirsiniz, Bunun gibi http://192.168.0.102:8080/

IP adresinden sonra PORT eklemeyi unutmayın, benim durumumda uygulama 8080 portunda çalışıyordu, bu yüzden 8080 portu ile (A) 'da elde edilen IP'yi ekledim


0

localhost başlangıçta benim emülatör iyi çalışıyor gibi görünüyordu ve sonra ben emülatör tarayıcıdan 127.0.2.2 kullanılan bağlantı reddedildi istisna almaya başladı ve çalıştı ve ben emülatör benim android app bu yeniden bağlantı reddedilen sorunu göstermeye başladı .

sonra ifconfig yaptım ve ip 192.168.2.2 kullandım ve mükemmel çalıştı


0

Hatalı istek genellikle gönderdiğiniz veri biçiminin yanlış olduğu anlamına gelir. Eşleşmeyen veri eşlemesi olabilir. Kötü istek alıyorsanız, sunucuya bağlanabileceğiniz anlamına gelir, ancak istek düzgün gönderilmiyor.


0

Birisi hala bunu arıyorsa, bu benim için böyle çalıştı.

Bağlandığınız cihaza / taklitçiye göre makinenizin IP'sini bulmanız gerekir. Emülatörler için aşağıdaki adımlar takip edilir;

  1. VM Sanal kutusuna gidin -> listeden bağlı cihazı seçin.
  2. Ayarlar -> Ağ-> Cihazın hangi ağa bağlı olduğunu bulun'u seçin. Benim için 'VirtualBox Only-Host Ethernet Adapter # 2' idi.
  3. Sanal kutuda Dosyalar-> Tercihler-> Ağ-> Yalnızca Ana Bilgisayar Ağları'na gidin ve yukarıdaki adımda belirtilen ağ için IPv4'ü bulun. (Hovering ile bilgileri alacaksınız)

Emülatörden localhost'a erişmek için bu IP'yi sağlayın. Bağlantı Noktası, hizmetlerinizi çalıştırırken / yayınlarken sağladığınızla aynıdır.

Not # 1: Güvenlik duvarlarına ve gelen kurallara dikkat ettiğinizden emin olun.

Not # 2: Makinenizi yeniden başlattıktan sonra lütfen bu IP'yi kontrol edin. Herhangi bir nedenle, "Aşağıdaki IP'yi kullan" ı sağlasam bile, Yalnızca Ana Bilgisayar IP'si değişti.


0

Hizmet katmanı Visual Studio IIS Express kullanırken tam sorunu çözdüm. Sadece 10.0.2.2:port çalışmayacak işaret. Diğer gönderilerde de belirtildiği gibi IIS Express çevresinde dolaşmak yerine, IIS Express'in önüne bir proxy yerleştirdim. Örneğin, apache veya nginx. Nginx.conf şöyle görünecektir

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

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

Sonra android IP adresimi 192.168.xx: 8090 olarak göstermelidir.


0

node express veya angular-cli gibi üçüncü taraf bir paket kullanıyorsanız, makinenizin IP'sini bulmanız ve sunucunuzu sunucu başlangıç ​​yapılandırması (localhost yerine) içinde bu IP'ye eklemeniz gerekir. Ardından IP'yi kullanarak emülatörden başlatın. Örneğin, şunu kullanmak zorundaydım: ng serve -H 10.149.212.104açısal-klibi kullanmak için. Sonra emülatörden kullandım:http://10.149.212.104:4200


0

1) cmd'de ipconfig komutunu çalıştırın

2) Bunun gibi bir sonuç alacaksınız resim açıklamasını buraya girin

3) Ardından VMWare Ağ Bağdaştırıcısı 1'in IPv4 Adresini ve ardından bağlantı noktası numarasını kullanın

Benim durumumda 8080, localhost yerine: 8080

192.168.56.1:8080 kullanıyorum

resim açıklamasını buraya girin

Bitti .....


0

localhostTemel erişim sorunu olan kimseler için neden emülatörlerden alınamayacağını açıklama . Gelişmiş durumlar için diğer cevapları okuyun.

Sorun: Öykünücünün kendi yerel ağı var ve localhostkendisini öykünücüye eşler , ancak sunucunuz DEĞİL!

Çözüm:

  1. Sunucunuzun 0.0.0.0ağında kullanılabilir olmasını sağlamak için sunucunuzu bağlayın
  2. Dizüstü bilgisayarınızın harici IP adresini alın: ifconfigMac için komut
  3. Android'de (veya Flutter uygulamasında) harici arayüzünüzün IP adresini aşağıdaki gibi 192.168.1.10kullanın:localhost

0

Android emülatöründen IIS .NET Web Hizmetime bağlanmaya çalışırken de aynı sorunu yaşadım.

  1. Yüklemek npm install -g iisexpress-proxy
  2. iisexpress-proxy 53990 to 9000 IIS ekspres bağlantı noktasını 9000'e proxy yapmak ve taklitçiden 9000 numaralı bağlantı noktasına erişmek "http://10.0.2.2:9000"

nedeni varsayılan olarak görünüyor, IIS Express ağ bağlantılarına izin vermiyor https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + veya + LAN üzerinden + 'dan + Web + App +

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.