Bagaimana cara menyambung ke URL jarak jauh di Java yang memerlukan otentikasi. Saya mencoba menemukan cara untuk mengubah kode berikut agar dapat memberikan nama pengguna / kata sandi secara terprogram sehingga tidak memunculkan 401.
URL url = new URL(String.format("http://%s/manager/list", _host + ":8080"));
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
java
httpurlconnection
pengguna14128
sumber
sumber
Jawaban:
Anda dapat menyetel pengautentikasi default untuk permintaan http seperti ini:
Selain itu, jika Anda membutuhkan lebih banyak fleksibilitas, Anda dapat memeriksa Apache HttpClient , yang akan memberi Anda lebih banyak opsi otentikasi (serta dukungan sesi, dll.)
sumber
Authenticator
perURL.openConnection()
permintaan tertentu daripada menyetelnya secara global?HttpURLConnection.setAuthenticator()
. Sayangnya di Java 8 dan sebelumnya, instance Authenticator adalah variabel global seluruh JVM. Lihat: docs.oracle.com/javase/9/docs/api/java/net/…Ada alternatif asli dan tidak terlalu mengganggu, yang hanya berfungsi untuk panggilan Anda.
sumber
.trim()
adalah hasilnya, atau memanggil varian metode yang tidak menghasilkan keluaran yang dipotong.javax.xml.bind.DatatypeConverter
tampaknya lebih aman.Anda juga dapat menggunakan berikut ini, yang tidak memerlukan penggunaan paket eksternal:
sumber
--add-modules javax.xml.bind
karena mereka menghapus paket dari classpath default. Dan di Java11 + itu dihapus sama sekali, Anda membutuhkan ketergantungan eksternal lagi. Begitulah kemajuan!java.util.Base64
sekarang jadi memang kemajuan :)Jika Anda menggunakan login normal sambil memasukkan nama pengguna dan kata sandi antara protokol dan domain, ini lebih sederhana. Ia juga bekerja dengan dan tanpa login.
Contoh Url: http: // pengguna: [email protected]/url
Harap perhatikan dalam komentar, dari valerybodak, di bawah ini bagaimana hal itu dilakukan dalam lingkungan pengembangan Android.
sumber
url.getUserInfo()
thorughURLDecoder.decode()
pertama (@ Peter Rader).Karena saya datang ke sini untuk mencari Android-Java-Answer, saya akan membuat ringkasan singkat:
Jika Anda ingin menggunakan java.net.URLConnection dengan Otentikasi Dasar di Android coba kode ini:
sumber
Mampu menyetel auth menggunakan HttpsURLConnection
beberapa perubahan diambil dari postingan ini. dan Base64 dari paket java.util.
sumber
Berhati-hatilah dengan pendekatan "Base64 (). Encode ()", tim saya dan saya mendapat 400 masalah permintaan buruk Apache karena menambahkan \ r \ n di akhir string yang dihasilkan.
Kami menemukannya mengendus paket berkat Wireshark.
Inilah solusi kami:
Semoga membantu!
sumber
Gunakan kode ini untuk otentikasi dasar.
sumber
Saya ingin memberikan jawaban untuk kasus di mana Anda tidak memiliki kendali atas kode yang membuka koneksi. Seperti yang saya lakukan saat menggunakan
URLClassLoader
untuk memuat file jar dari server yang dilindungi kata sandi.The
Authenticator
solusi akan bekerja tapi memiliki kekurangan yang pertama kali mencoba untuk mencapai server tanpa password dan hanya setelah server meminta password menyediakan satu. Itu adalah perjalanan bolak-balik yang tidak perlu jika Anda sudah mengetahui bahwa server memerlukan kata sandi.Ini mendaftarkan protokol baru
my
yang digantihttp
saat kredensial ditambahkan. Jadi saat membuat yang baruURLClassLoader
ganti sajahttp
denganmy
dan semuanya baik-baik saja. Saya tahuURLClassLoader
menyediakan konstruktor yang membutuhkanURLStreamHandlerFactory
tetapi pabrik ini tidak digunakan jika URL mengarah ke file jar.sumber
Sejak Java 9, Anda dapat melakukan ini
sumber
setAuthenticator()
metode.IMPLEMENTASI ANDROD Sebuah metode lengkap untuk meminta respon data / string dari layanan web meminta otorisasi dengan nama pengguna dan kata sandi
sumber
Saya melakukan itu dengan cara ini Anda perlu melakukan ini, cukup salin tempel, itu akan bahagia
sumber