Saya menjalankan layanan web di mesin lokal saya yang beroperasi pada localhost:54722
.
Saya ingin memanggil layanan dari aplikasi yang berjalan di emulator Android.
Saya membaca bahwa menggunakan 10.0.2.2
dalam aplikasi akan mengakses localhost, tetapi sepertinya tidak bekerja dengan nomor port juga. Dikatakan HttpResponseException: Bad Request
.
Jawaban:
Anda dapat mengakses mesin host Anda dengan alamat IP "
10.0.2.2
".Ini telah dirancang dengan cara ini oleh tim Android. Jadi server web Anda dapat berjalan dengan sempurna di localhost dan dari aplikasi Android Anda, Anda dapat mengaksesnya melalui "
http://10.0.2.2:<hostport>
".Jika emulator Anda harus mengakses internet melalui server proxy, Anda dapat mengonfigurasi proksi HTTP khusus dari layar Kontrol diperluas emulator. Dengan emulator terbuka, klik Lainnya , lalu klik Pengaturan dan Proksi . Dari sini, Anda dapat menentukan pengaturan proxy HTTP Anda sendiri.
sumber
Gunakan 10.0.2.2 untuk AVD default dan 10.0.3.2 untuk Genymotion
sumber
Saya menghadapi masalah yang sama pada Visual Studio menjalankan aplikasi web di IIS Express. untuk memperbaikinya Anda harus pergi ke properti proyek Anda kemudian klik pada Debug Tab dan ubah http: // localhost: [ PORT ANDA ] menjadi http://127.0.0.1:[YOUR PORT] dan atur url android ke http: / /10.0.2.2:[PORT ANDA ]. itu berhasil untuk saya.
sumber
http://localhost:5000/
simulator Postman dan iOS. Solusi ini berfungsi untuk simulator Android dan tidak perlu memodifikasi server saya, atau pengaturan apa pun di simulator. Cepat, bagus, dan portabel untuk komputer lain tanpa kerja ekstra.Jika Anda menggunakan IIS Express, Anda mungkin perlu mengikat semua nama host alih-alih hanya `localhost '. Periksa jawaban yang bagus ini:
https://stackoverflow.com/a/15809698/383761
Pastikan untuk menambahkannya sebagai penjilidan kedua alih-alih memodifikasi yang sudah ada atau VS hanya akan menambahkan kembali situs baru yang ditambahkan dengan
(1)
Juga, Anda mungkin perlu menjalankan VS sebagai administrator.sumber
Saya menyelesaikannya dengan pemasangan "Conveyor by Keyoti" di Visual Studio Professional 2015. Conveyor menghasilkan alamat REMOTE (IP Anda) dengan port (45455) yang memungkinkan permintaan eksternal. Contoh:
Conveyor memungkinkan Anda menguji aplikasi web dari tablet eksternal dan ponsel di jaringan Anda atau dari emulator Android (tanpa
http://10.0.2.2:<hostport>
)Langkah-langkahnya ada di tautan berikut:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
sumber
Saya memiliki server web yang berjalan di localhost saya.
Jika saya membuka emulator dan ingin terhubung ke localhost saya, saya menggunakan
192.168.x.x
. Ini berarti Anda harus menggunakan alamat IP lokal Anda. Omong-omong, AndaHttpResponseException (Bad Request)
tidak berarti bahwa tuan rumah tidak dapat dijangkau.Beberapa kesalahan lain menyebabkan pengecualian ini.
sumber
Karena
10.0.2.2
bukan domain aman untuk Android, Anda harus mengizinkan domain tidak aman dalam konfigurasi jaringan Anda untuk API 28+ di mana koneksi non-TLS dicegah secara default.Anda dapat menggunakan konfigurasi saya berikut ini:
Buat file baru di main / res / xml / network_security_config.xml sebagai:
Dan arahkan ke AndroidManifest.xml
sumber
Masalahnya adalah bahwa emulator Android memetakan
10.0.2.2
ke127.0.0.1
, bukan kelocalhost
. Jadi konfigurasikan server web Anda ke serveron127.0.0.1:54722
dan bukanlocalhost:54722
. Itu harus dilakukan.sumber
Setelah menjalankan host lokal Anda, Anda sampai di
http://localhost:[port number]/
sini Anda menemukan nomor port Anda.Kemudian dapatkan alamat IP Anda dari Command, Buka perintah windows Anda dan ketik
ipconfig
Dalam kasus saya, IP sudah
192.168.10.33
jadi URL saya akan menjadi http://192.168.10.33:[port nomor] /. Di Android, studio menggunakan URL ini sebagai URL Anda. Dan setelah itu atur URL Anda dan nomor port Anda di proksi manual untuk emulator.sumber
Anda perlu mengatur URL sebagai
10.0.2.2:portNr
portNr =
port yang diberikan oleh ASP.NET Development Server layanan saya saat ini sedang berjalanlocalhost:3229/Service.svc
jadi url saya
10.0.2.2:3229
Saya telah memperbaiki masalah saya dengan cara ini
Saya harap ini membantu ...
sumber
"BadRequest" adalah kesalahan yang biasanya dikirim oleh server itu sendiri, lihat rfc 2616
Jadi Anda mendapat koneksi yang berfungsi ke server, tetapi permintaan Anda tidak sesuai dengan formulir expecet. Saya tidak tahu bagaimana Anda membuat koneksi, tajuk apa yang disertakan (jika ada) - tetapi itulah yang harus Anda periksa.
Jika Anda membutuhkan bantuan lebih lanjut, jelaskan tentang kode Anda dan apa yang digunakannya untuk terhubung ke Server, jadi kami memiliki gambaran besarnya.
Berikut adalah pertanyaan dengan Masalah yang sama - jawabannya adalah bahwa tipe konten tidak diatur dalam header.
sumber
Saya ingin menunjukkan kepada Anda cara saya mengakses API Web IISExpress dari Android Emulator saya. Saya menggunakan Visual Studio 2015. Dan saya memanggil Android Emulator dari Android Studio.
Semua yang perlu saya lakukan adalah menambahkan baris berikut ke konfigurasi pengikatan di file applicationhost.config saya
Kemudian saya memeriksa dan menggunakan Alamat IP4 untuk mengakses API saya dari emulator Android
Persyaratan: Anda harus menjalankan Visual Studio sebagai Administrator. Posting ini memberikan cara sempurna untuk melakukan ini.
Untuk lebih jelasnya, silakan kunjungi posting saya di github
Semoga ini membantu.
sumber
Untuk Pengguna Homestead Laravel: Jika ada yang menggunakan Laravel dengan homestead Anda dapat mengakses backend aplikasi menggunakan 192.168.10.10 di emulator
Masih tidak bekerja? Solusi bagus lainnya adalah menggunakan ngrok https://ngrok.com/
sumber
Saya menggunakan Windows 10 sebagai platform pengembangan saya, mengakses 10.0.2.2:port di emulator saya tidak berfungsi seperti yang diharapkan, dan hasil yang sama untuk solusi lain dalam pertanyaan ini juga.
Setelah beberapa jam menggali, saya menemukan bahwa jika Anda menambahkan argumen -writable-system ke perintah startup emulator, semuanya akan berfungsi.
Anda harus memulai emulator melalui baris perintah seperti di bawah ini:
Kemudian di emulator Anda, Anda dapat mengakses layanan API Anda yang berjalan di mesin host, menggunakan alamat IP LAN dan port yang mengikat:
Semoga ini bisa membantu Anda.
Tentang memulai emulator dari baris perintah: https://developer.android.com/studio/run/emulator-commandline .
sumber
Untuk mengakses localhost di Android Emulator
Tambahkan izin internet dari AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Tambahkan
android:usesCleartextTraffic="true"
, lebih detail di sini :Jalankan perintah yang disebutkan di bawah ini untuk menemukan alamat IP sistem Anda:
Salin alamat IP yang diperoleh dari langkah ini (A)
Jalankan aplikasi backend Anda, yang dapat Anda akses di
localhost
atau127.0.0.1
dari sistem Anda.Sekarang di studio android, Anda dapat mengganti URL jika Anda menggunakan kode atau Anda dapat menggunakan alamat ip yang diperoleh dari langkah (A) dan mencoba membuka di browser web, Seperti ini http://192.168.0.102:8080/
Jangan lupa untuk menambahkan PORT setelah alamat IP, dalam aplikasi kasus saya berjalan pada port 8080 jadi saya menambahkan IP yang diperoleh di (A) dengan port 8080
sumber
localhost tampaknya berfungsi dengan baik di emulator saya di awal dan kemudian saya mulai mendapatkan koneksi yang ditolak kecuali saya menggunakan 127.0.2.2 dari browser emulator dan itu bekerja dan ketika saya menggunakan ini di aplikasi android saya di emulator itu lagi mulai menunjukkan koneksi menolak masalah .
kemudian saya melakukan ifconfig dan saya menggunakan ip 192.168.2.2 dan bekerja dengan baik
sumber
Permintaan yang buruk umumnya berarti format data yang Anda kirim salah. Mungkin pemetaan data tidak cocok. Jika Anda mendapatkan permintaan yang buruk berarti Anda dapat terhubung ke server, tetapi permintaan tersebut tidak terkirim dengan benar.
sumber
Jika ada yang masih mencari ini, ini adalah cara kerjanya untuk saya.
Anda perlu menemukan IP mesin Anda sehubungan dengan perangkat / emulator yang Anda sambungkan. Untuk Emulator, jalannya adalah dengan mengikuti langkah-langkah di bawah ini;
Berikan IP ini untuk mengakses localhost dari emulator. Port sama dengan yang Anda berikan saat menjalankan / menerbitkan layanan Anda.
Catatan # 1: Pastikan Anda telah menjaga firewall dan aturan masuk.
Catatan # 2: Silakan periksa IP ini setelah Anda me-restart mesin Anda. Untuk beberapa alasan, bahkan jika saya memberikan "Gunakan IP berikut" IP Host-Only dapat berubah.
sumber
Saya telah menyelesaikan masalah saat lapisan layanan menggunakan Visual Studio IIS Express. Arahkan ke 10.0.2.2:port tidak akan berfungsi. Alih-alih mengotak-atik IIS Express seperti yang disebutkan oleh posting lain, saya hanya meletakkan proxy di depan IIS Express. Misalnya, apache atau nginx. Nginx.conf akan terlihat seperti
Maka android perlu menunjuk ke alamat IP saya sebagai 192.168.xx: 8090
sumber
jika Anda menggunakan beberapa paket pihak ke-3 seperti node express atau angular-cli, Anda harus menemukan IP mesin Anda, dan melampirkan host Anda ke IP tersebut dalam konfigurasi startup server (bukan localhost). Kemudian luncurkan dari emulator menggunakan IP. Sebagai contoh, saya harus menggunakan:
ng serve -H 10.149.212.104
untuk menggunakan angular-cli. Kemudian dari emulator saya menggunakan:http://10.149.212.104:4200
sumber
1) Jalankan perintah ipconfig dalam cmd
2) Anda akan mendapatkan hasil seperti ini
3) Kemudian gunakan Alamat IPv4 dari VMWare Network Adapter 1 diikuti oleh nomor port
Dalam Kasus Saya ini 8080, jadi alih-alih menggunakan localhost: 8080
Saya menggunakan 192.168.56.1:8080
Selesai .....
sumber
Penjelasan mengapa
localhost
tidak tersedia dari emulator untuk siapa saja yang memiliki masalah akses dasar. Untuk kasus canggih baca jawaban lain.Masalah: Emulator memiliki jaringan lokal sendiri dan
localhost
memetakan dirinya ke emulator , tetapi BUKAN host Anda!Larutan:
0.0.0.0
untuk membuatnya tersedia untuk jaringan emulatorifconfig
perintah untuk Mac192.168.1.10
bukanlocalhost
sumber
Saya memiliki masalah yang sama ketika saya mencoba untuk terhubung ke IIS .NET Webservice dari emulator Android.
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
ke proxy IIS express port ke 9000 dan akses port 9000 dari emulator like"http://10.0.2.2:9000"
alasannya tampaknya secara default, IIS Express tidak mengizinkan koneksi dari jaringan https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API + atau + Web + Aplikasi + dari + lintas + LAN
sumber