Saya ingin membuat permintaan http ke server jarak jauh sambil menangani cookie dengan benar (mis. Menyimpan cookie yang dikirim oleh server, dan mengirim cookie tersebut ketika saya membuat permintaan berikutnya). Akan menyenangkan untuk menyimpan setiap dan semua cookie, tetapi satu-satunya yang saya pedulikan adalah cookie sesi.
Dengan java.net, tampaknya cara yang disukai untuk melakukan ini adalah menggunakan java.net.CookieHandler (kelas dasar abstrak) dan java.net.CookieManager (implementasi konkret). Android memiliki java.net.CookieHandler, tetapi tampaknya tidak memiliki java.net.CookieManager.
Saya bisa mengkodekan semuanya dengan tangan dengan memeriksa header http, tetapi sepertinya pasti ada cara yang lebih mudah.
Apa cara yang tepat untuk membuat permintaan http di Android sambil mempertahankan cookie?
java.net.CookieManager
sekarang didukung di Android sejak versi 2.3 (API level 9): developer.android.com/reference/java/net/CookieManager.htmlJawaban:
Ternyata Google Android dikirimkan dengan Apache HttpClient 4.0, dan saya dapat mengetahui cara melakukannya menggunakan contoh "Logon berbasis formulir" di dokumen HttpClient :
https://github.com/apache/httpcomponents-client/blob/master/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientFormLogin.java
sumber
The method getCookieStore() is undefined for the type HttpClient
, Apakah saya harus berganti keList<Cookie> cookies = ((AbstractHttpClient) httpclient).getCookieStore().getCookies();
? Karena jika saya melakukannya, itu berhasil.Cookie hanyalah header HTTP lainnya. Anda selalu dapat menyetelnya saat melakukan panggilan HTTP dengan pustaka apache atau dengan HTTPUrlConnection. Apa pun itu, Anda harus dapat membaca dan menyetel cookie HTTP dengan cara ini.
Anda dapat membaca artikel ini untuk informasi lebih lanjut.
Saya dapat membagikan kedamaian kode saya untuk menunjukkan betapa mudahnya Anda membuatnya.
sumber
Karena pustaka Apache sudah usang , bagi mereka yang ingin menggunakan
HttpURLConncetion
, saya menulis kelas ini untuk mengirim Dapatkan dan Kirim Permintaan dengan bantuan jawaban ini :sumber
Saya tidak bekerja dengan google android tetapi saya pikir Anda akan menemukan tidak terlalu sulit untuk membuatnya bekerja. Jika Anda membaca sedikit yang relevan dari tutorial java Anda akan melihat bahwa cookiehandler terdaftar mendapat panggilan balik dari kode HTTP.
Jadi jika tidak ada default (
CookieHandler.getDefault()
sudahkah Anda memeriksa apakah benar-benar null?) Maka Anda cukup memperluas CookieHandler, mengimplementasikan put / get dan membuatnya bekerja secara otomatis. Pastikan untuk mempertimbangkan akses bersamaan dan sejenisnya jika Anda pergi ke rute itu.edit: Jelas Anda harus menetapkan contoh implementasi kustom Anda sebagai pengendali default melalui
CookieHandler.setDefault()
untuk menerima callback. Lupa menyebutkan itu.sumber