Saya berhasil menggunakan kode ini untuk mengirim HTTP
permintaan dengan beberapa parameter melalui GET
metode
void sendRequest(String request)
{
// i.e.: request = "http://example.com/index.php?param1=a¶m2=b¶m3=c";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "text/plain");
connection.setRequestProperty("charset", "utf-8");
connection.connect();
}
Sekarang saya mungkin perlu mengirim parameter (yaitu param1, param2, param3) melalui POST
metode karena sangat panjang. Saya berpikir untuk menambahkan parameter tambahan untuk metode itu (yaitu String httpMethod).
Bagaimana saya bisa mengubah kode di atas sesedikit mungkin agar dapat mengirim parameter baik melalui GET
atau POST
?
Saya berharap perubahan itu
connection.setRequestMethod("GET");
untuk
connection.setRequestMethod("POST");
akan melakukan trik, tetapi parameternya masih dikirim melalui metode GET.
Apakah HttpURLConnection
ada metode yang akan membantu? Apakah ada konstruksi Java yang membantu?
Bantuan apa pun akan sangat dihargai.
http://example.com/index.php
)Jawaban:
Dalam permintaan GET, parameter dikirim sebagai bagian dari URL.
Dalam permintaan POST, parameter dikirim sebagai badan permintaan, setelah header.
Untuk melakukan POST dengan HttpURLConnection, Anda perlu menulis parameter ke koneksi setelah Anda membuka koneksi.
Kode ini harus membantu Anda memulai:
sumber
byte[] data = urlParameters.getBytes(Charset.forName("UTF-8"))
:)conn.getResponseCode()
atauconn.getInputStream()
sebaliknya itu tidak akan mengirim data apa pun.Berikut adalah contoh sederhana yang mengirimkan formulir lalu membuang halaman hasil
System.out
. Ubah URL dan params POST yang sesuai, tentu saja:Jika Anda ingin hasilnya sebagai
String
ganti dicetak langsung lakukan:sumber
UTF-8
, yang tidak selalu terjadi. Untuk mengambil charset, seseorang harus mendapatkan headerContent-Type
dan mengurai charset itu. Ketika itu header tidak tersedia, gunakan salah satu http standar:ISO-8859-1
.<meta charset="...">
atau<meta http-equiv="Content-Type" content="...">
header di dalam dokumen yang perlu diuraikan.response += line;
sangat lambat, dan itu memakan jeda baris. Saya telah menambahkan ke jawaban contoh untuk mendapatkan respons string.Saya tidak bisa mendapatkan contoh Alan untuk benar-benar melakukan posting, jadi saya berakhir dengan ini:
sumber
Saya merasa
HttpURLConnection
sangat tidak praktis untuk digunakan. Dan Anda harus menulis banyak boilerplate, kode rawan kesalahan. Saya membutuhkan pembungkus ringan untuk proyek Android saya dan keluar dengan perpustakaan yang dapat Anda gunakan juga: DavidWebb .Contoh di atas dapat ditulis seperti ini:
Anda dapat menemukan daftar pustaka alternatif pada tautan yang disediakan.
sumber
saya telah membaca jawaban di atas dan telah membuat kelas utilitas untuk menyederhanakan permintaan HTTP. Saya harap ini akan membantu Anda.
Metode Panggilan
Kelas Utilitas
sumber
Saya melihat beberapa jawaban lain telah memberikan alternatif, saya pribadi berpikir bahwa secara intuitif Anda melakukan hal yang benar;). Maaf, di devoxx di mana beberapa pembicara telah mengomel tentang hal semacam ini.
Itu sebabnya saya secara pribadi menggunakan pustaka HTTPClient / HttpCore Apache untuk melakukan pekerjaan semacam ini, saya menemukan API mereka lebih mudah digunakan daripada dukungan HTTP asli Java. YMMV tentu saja!
sumber
sumber
import java.net.*;
!Saya memiliki masalah yang sama. Saya ingin mengirim data melalui POST. Saya menggunakan kode berikut:
Saya menggunakan Jsoup untuk parse:
sumber
GET dan metode POST diatur seperti ini ... Dua jenis untuk panggilan api 1) get () dan 2) post (). metode get () untuk mendapatkan nilai dari array api json untuk mendapatkan metode nilai & post () yang digunakan dalam posting data kami di url dan mendapatkan respons.
sumber
Coba pola ini:
sumber
Jawaban ini mencakup kasus khusus Panggilan POST menggunakan POJO Java Kustom.
Menggunakan maven dependency untuk Gson untuk membuat serialisasi Java Object ke JSON.
Instal Gson menggunakan dependensi di bawah ini.
Bagi yang menggunakan gradle dapat menggunakan di bawah ini
Impor lain yang digunakan:
Sekarang, kita dapat melanjutkan dan menggunakan HttpPost yang disediakan oleh Apache
Kode di atas akan kembali dengan kode respons yang diterima dari Panggilan POST
sumber
di sini saya mengirim jsonobject sebagai parameter // jsonobject = {"name": "lucifer", "pass": "abc"} // serverUrl = " http://192.168.100.12/testing " //host=192.168.100.12
sumber
Saya sangat merekomendasikan http-request dibangun di atas apache http api.
Untuk kasus Anda, Anda dapat melihat contoh:
Jika Anda tidak tertarik dengan badan tanggapan
Untuk permintaan pengiriman pos umum dengan permintaan http : Baca dokumentasi dan lihat jawaban saya Permintaan HTTP POST dengan JSON String di JAVA , Mengirim Permintaan HTTP POST Di Jawa , HTTP POST menggunakan JSON di Java
sumber
Halo, tolong gunakan kelas ini untuk meningkatkan metode posting Anda
sumber
Saya mengambil jawaban Boann dan menggunakannya untuk membuat pembuat string kueri yang lebih fleksibel yang mendukung daftar dan array, seperti metode http_build_query php:
sumber
Bagi mereka yang mengalami kesulitan menerima permintaan pada halaman php menggunakan $ _POST karena Anda mengharapkan pasangan nilai kunci:
Sementara semua jawaban yang sangat membantu, saya tidak memiliki beberapa pemahaman dasar tentang string yang sebenarnya untuk dikirim, karena di HttpClient apache lama saya menggunakan
dan kemudian bisa menggunakan $ _POST di php jangan mendapatkan pasangan kunci-nilai.
Untuk pemahaman saya sekarang, seseorang telah membuat string itu secara manual sebelum memposting. Jadi string harus terlihat seperti
tetapi sebaliknya hanya menambahkannya ke url itu diposting (di header).
Alternatifnya adalah menggunakan json-string sebagai gantinya:
dan tarik dalam php tanpa $ _POST:
Di sini Anda menemukan kode sampel di Kotlin:
sumber
Tampaknya Anda juga harus memanggil
connection.getOutputStream()
"setidaknya sekali" (dan jugasetDoOutput(true)
) agar dapat memperlakukannya sebagai POST.Jadi kode minimum yang diperlukan adalah:
Anda bahkan dapat menggunakan parameter gaya "GET" di urlString, secara mengejutkan. Meskipun itu mungkin membingungkan banyak hal.
Anda juga dapat menggunakan NameValuePair .
sumber