Saya tahu dulu ada cara untuk mendapatkannya dengan apache commons seperti yang didokumentasikan di sini: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html dan sebuah contoh di sini:
http://www.kodejava.org/examples/416.html
tapi saya percaya ini sudah usang. Apakah ada cara lain untuk membuat permintaan http mendapatkan di java dan mendapatkan tubuh respon sebagai string dan bukan stream?
java
apache-httpclient-4.x
apache-commons
Danish94
sumber
sumber
Jawaban:
Setiap perpustakaan yang saya pikirkan mengembalikan aliran. Anda dapat menggunakan
IOUtils.toString()
dari Apache Commons IO untuk membacakanInputStream
keString
dalam metode panggilan satu. Misalnya:Pembaruan: Saya mengubah contoh di atas untuk menggunakan pengkodean konten dari respons jika tersedia. Kalau tidak, itu akan default ke UTF-8 sebagai tebakan terbaik, alih-alih menggunakan standar sistem lokal.
sumber
Content-Encoding
header dari respons jika tersedia.Berikut adalah dua contoh dari proyek kerja saya.
Menggunakan
EntityUtils
danHttpEntity
Menggunakan
BasicResponseHandler
sumber
response.getEntity()
dan sekarang tersedia sebagairesponseString
. jika Anda mencoba melakukan response.getEntity () lagi, itu akan kembaliIllegalStateException
.Berikut ini contoh dari proyek sederhana lain yang sedang saya kerjakan menggunakan pustaka httpclient dari Apache:
cukup gunakan EntityUtils untuk mengambil tubuh respons sebagai sebuah String. sangat sederhana.
sumber
Ini relatif sederhana dalam kasus tertentu, tetapi cukup rumit dalam kasus umum.
Jawabannya tergantung pada
Content-Type
tajuk respons HTTP .Header ini berisi informasi tentang payload dan mungkin menentukan pengkodean data tekstual. Bahkan jika Anda menganggap jenis teks , Anda mungkin perlu memeriksa konten itu sendiri untuk menentukan pengkodean karakter yang benar. Misalnya, lihat spesifikasi HTML 4 untuk detail tentang cara melakukan itu untuk format tertentu.
Setelah pengkodean diketahui, InputStreamReader dapat digunakan untuk mendekode data.
Jawaban ini tergantung pada server yang melakukan hal yang benar - jika Anda ingin menangani kasus di mana header respons tidak cocok dengan dokumen, atau deklarasi dokumen tidak cocok dengan pengkodean yang digunakan, itu adalah ketel ikan.
sumber
Di bawah ini adalah cara sederhana untuk mengakses respons sebagai String menggunakan pustaka Apache HTTP Client.
sumber
Bagaimana dengan ini saja?
sumber
Jawaban oleh McDowell benar. Namun jika Anda mencoba saran lain di beberapa posting di atas.
Maka itu akan memberi Anda ilegalStateException yang menyatakan bahwa konten sudah dikonsumsi.
sumber
Kita dapat menggunakan kode di bawah ini juga untuk mendapatkan Respons HTML di java
sumber
Inilah cara ringan untuk melakukannya:
Dengan tentu saja
responseString
berisi tanggapan dan tanggapan situs web sebagai tipeHttpResponse
, dikembalikan olehHttpClient.execute(request)
sumber
Berikut ini adalah cuplikan kode yang menunjukkan cara yang lebih baik untuk menangani badan respons sebagai sebuah String apakah itu respons yang sah atau respons kesalahan untuk permintaan HTTP POST:
sumber
Anda dapat menggunakan pustaka pihak 3-d yang mengirimkan permintaan Http dan menangani respons. Salah satu produk yang terkenal adalah Apache commons HTTPClient: HttpClient javadoc , artefak HttpClient Maven . Ada HTTPClient jauh lebih dikenal tetapi jauh lebih sederhana (bagian dari perpustakaan open source MgntUtils yang ditulis oleh saya): MgntUtils HttpClient javadoc , MgntUtils maven artefak , MgntUtils Github . Dengan menggunakan salah satu pustaka tersebut, Anda dapat mengirim permintaan REST dan menerima respons secara mandiri dari Spring sebagai bagian dari logika bisnis Anda
sumber
Jika Anda menggunakan Jackson deserialize respon tubuh, salah satu solusi yang sangat sederhana adalah dengan menggunakan
request.getResponseBodyAsStream()
bukannyarequest.getResponseBodyAsString()
sumber