Saya ingin mengembalikan false jika URL membutuhkan lebih dari 5 detik untuk terhubung - bagaimana ini mungkin menggunakan Java? Berikut adalah kode yang saya gunakan untuk memeriksa apakah URL tersebut valid
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
java.net.ConnectException: Connection timed out: connect
bahkan sebelum 2 menit habis. Tahukah Anda apa yang menyebabkan masalah?setConnectTimeout
sebelum salah satu metode yang terhubung secara implisit (pada dasarnya semua metode yang menampilkan IllegalStateException jika sudah terhubung). Idealnya, jadikan setConnectTimeout (readTimeout) sebagai metode pertama yang dipanggil.con.setReadTimeout()
, itu berfungsi seperti yang diharapkan.Anda dapat mengatur waktu tunggu seperti ini,
sumber
Jika Koneksi HTTP tidak kehabisan waktu, Anda dapat mengimplementasikan pemeriksa waktu tunggu di utas latar belakang itu sendiri (AsyncTask, Layanan, dll), kelas berikut adalah contoh untuk Sesuaikan AsyncTask yang waktu tunggu habis setelah periode tertentu
Contoh untuk ini
sumber
onPreExecute()
. Selain itu, jika Anda membatalkan tugas secara manual, Anda juga harus membatalkan panggilan terjadwal untuk menghindari kebocoran.Saya bisa mendapatkan solusi untuk masalah serupa dengan penambahan garis sederhana
Persyaratan saya adalah mengetahui kode respons dan untuk itu hanya mendapatkan informasi meta saja sudah cukup, alih-alih mendapatkan isi respons lengkap.
Metode permintaan default adalah GET dan membutuhkan banyak waktu untuk kembali, akhirnya melemparkan saya SocketTimeoutException. Responnya cukup cepat ketika saya mengatur Metode Permintaan ke HEAD.
sumber
HEAD
permintaan menjadi permintaan yang tidak akan menghasilkan isi respons apa pun..setRequestMethod("HEAD")
di kodenya. Anehnya, penjelasan ini persis seperti yang saya butuhkan untuk mengurangi masalah "Terlalu banyak file yang terbuka". Jadi terima kasih?