Pertanyaan Bagaimana cara menambahkan parameter kueri ke GetMethod (menggunakan Java commons-httpclient)?


Menggunakan Apache commons-httpclient untuk Java, apa cara terbaik untuk menambahkan parameter kueri ke instance GetMethod? Jika saya menggunakan PostMethod, itu sangat mudah:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

GetMethod tidak memiliki metode "addParameter". Saya telah menemukan bahwa ini berfungsi:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

Namun, sebagian besar contoh yang pernah saya lihat, baik keraskan kode parameter langsung ke URL, misalnya:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

atau kode-keras string kueri, misalnya:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

Apakah salah satu pola ini lebih disukai? Dan mengapa perbedaan API antara PostMethod dan GetMethod? Dan apa semua metode HttpMethodParams lain yang dimaksudkan untuk digunakan?


32
2017-10-19 22:31


asal


Jawaban:


Metode posting memiliki parameter posting, tetapi dapatkan metode tidak.

Parameter kueri disematkan di URL. Versi HttpClient saat ini menerima string di konstruktor. Jika Anda ingin menambahkan kunci, pasangan nilai di atas, Anda dapat menggunakan:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

Tutorial awal yang baik dapat ditemukan di Halaman Apache Jakarta Commons.

Memperbarui: Seperti yang disarankan dalam komentar, NameValuePair berfungsi.

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

22
2017-10-19 22:49



Ini bukan hanya masalah preferensi pribadi. Masalah terkait di sini adalah penyandian URL nilai parameter Anda, sehingga nilainya tidak akan rusak atau salah tafsir sebagai pembatas tambahan, dll.

Seperti biasa, yang terbaik adalah membaca dokumentasi API secara terperinci: Dokumentasi API HttpClient

Membaca ini, Anda bisa melihatnya setQueryString(String) TIDAK akan menyandikan URL atau membatasi parameter & nilai Anda, sedangkan setQueryString(NameValuePair[]) akan secara otomatis mengkode-URL dan membatasi nama dan nilai parameter Anda. Ini adalah metode terbaik kapan pun Anda menggunakan data dinamis, karena mungkin berisi tanda garis, tanda sama, dll.


17
2017-08-09 19:08



Cobalah seperti ini:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());

8
2017-10-23 15:10