Apache HttpClient - Panduan Cepat
Hypertext Transfer Protocol (HTTP) adalah protokol tingkat aplikasi untuk sistem informasi hypermedia yang terdistribusi, kolaboratif. Ini adalah dasar untuk komunikasi data untuk World Wide Web (yaitu, Internet) sejak tahun 1990. HTTP adalah protokol umum dan tanpa negara yang dapat digunakan untuk tujuan lain juga menggunakan ekstensi metode permintaan, kode kesalahan, dan tajuknya.
Pada dasarnya, HTTP adalah protokol komunikasi berbasis TCP / IP, yang digunakan untuk mengirimkan data (file HTML, file gambar, hasil kueri, dll.) Di World Wide Web. Port default adalah TCP 80, tetapi port lain juga dapat digunakan. Ini menyediakan cara standar bagi komputer untuk berkomunikasi satu sama lain. Spesifikasi HTTP menentukan bagaimana data permintaan klien akan dibuat dan dikirim ke server, dan bagaimana server menanggapi permintaan ini.
Apa itu Klien Http
Klien http adalah pustaka transfer, ia berada di sisi klien, mengirim dan menerima pesan HTTP. Ini menyediakan implementasi terkini, kaya fitur, dan efisien yang memenuhi standar HTTP terkini.
Selain ini menggunakan pustaka klien, seseorang dapat membangun aplikasi berbasis HTTP seperti browser web, klien layanan web, dll.
Fitur Klien Http
Berikut adalah fitur menonjol dari klien Http -
Pustaka HttpClient mengimplementasikan semua metode HTTP yang tersedia.
Pustaka HttpClient menyediakan API untuk mengamankan permintaan menggunakan protokol Secure Socket Layer.
Dengan menggunakan HttpClient, Anda dapat membuat koneksi menggunakan proxy.
Anda dapat mengotentikasi koneksi menggunakan skema otentikasi seperti Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, dll.
Pustaka HttpClient mendukung pengiriman permintaan melalui beberapa utas. Ini mengelola beberapa koneksi yang dibuat dari berbagai utas menggunakanClientConnectionPoolManager.
Dengan menggunakan pustaka Apache HttpClient, Anda dapat mengatur waktu tunggu koneksi.
Dalam bab ini, kami akan menjelaskan cara menyetel lingkungan untuk HttpClient di Eclipse IDE. Sebelum melanjutkan dengan penginstalan, pastikan Anda sudah menginstal Eclipse di sistem Anda. Jika tidak, unduh dan instal Eclipse.
Untuk informasi lebih lanjut tentang Eclipse, lihat Tutorial Eclipse kami .
Langkah 1 - Unduh file JAR ketergantungan
Buka beranda resmi situs web HttpClient (komponen) dan buka halaman unduhan
Kemudian, unduh versi stabil terbaru dari HttpClient. Di sini, sepanjang tutorial, kami menggunakan versi 4.5.6 maka unduh file4.5.6.zip.
Di dalam folder yang diunduh, Anda akan menemukan folder bernama lib dan ini berisi file Jar yang diperlukan yang akan ditambahkan di jalur kelas proyek Anda, untuk bekerja dengan HttpClient.
Langkah 2 - Buat proyek dan setel jalur pembuatan
Buka gerhana dan buat proyek sampel. Klik kanan pada proyek pilih opsiBuild Path → Configure Build Path seperti gambar dibawah.
Dalam Java Build Path bingkai di Libraries tab, klik Add External JARs.
Dan pilih semua file jar di folder lib dan, klik Apply and Close.
Anda siap untuk bekerja dengan perpustakaan HttpClient di gerhana.
Metode GET digunakan untuk mengambil informasi dari server yang diberikan menggunakan URI yang diberikan. Permintaan yang menggunakan GET seharusnya hanya mengambil data dan tidak memiliki efek lain pada data.
API HttpClient menyediakan kelas bernama HttpGet yang mewakili metode permintaan get.
Ikuti langkah-langkah yang diberikan di bawah ini untuk mengirim permintaan get menggunakan pustaka HttpClient
Langkah 1 - Buat objek HttpClient
Itu createDefault() metode dari HttpClients kelas kembali a CloseableHttpClient objek, yang merupakan implementasi dasar dari HttpClient antarmuka.
Menggunakan metode ini, buat objek HttpClient seperti yang ditunjukkan di bawah ini -
CloseableHttpClient httpclient = HttpClients.createDefault();
Langkah 2 - Buat Objek HttpGet
Itu HttpGet class mewakili permintaan HTTPGET yang mengambil informasi dari server yang diberikan menggunakan URI.
Buat permintaan HTTP GET dengan membuat instance kelas ini. Konstruktor kelas ini menerima nilai String yang mewakili URI.
HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");
Langkah 3 - Jalankan Permintaan Dapatkan
Itu execute() metode dari CloseableHttpClient kelas menerima objek HttpUriRequest (antarmuka) (yaitu HttpGet, HttpPost, HttpPut, HttpHead dll.) dan mengembalikan objek respons.
Jalankan permintaan menggunakan metode ini seperti yang ditunjukkan di bawah ini -
HttpResponse httpresponse = httpclient.execute(httpget);
Contoh
Berikut adalah contoh yang mendemonstrasikan eksekusi permintaan HTTP GET menggunakan pustaka HttpClient.
import java.util.Scanner;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpGetExample {
public static void main(String args[]) throws Exception{
//Creating a HttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");
//Printing the method used
System.out.println("Request Type: "+httpget.getMethod());
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
Scanner sc = new Scanner(httpresponse.getEntity().getContent());
//Printing the status line
System.out.println(httpresponse.getStatusLine());
while(sc.hasNext()) {
System.out.println(sc.nextLine());
}
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Request Type: GET
<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<title>Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java
i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible,
LOLCODE, Current Affairs 2018, Apache Commons Collections</title>
<meta name = "Description" content = "Parallax Scrolling, Java Cryptography, YAML,
Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common
CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Intellij Idea, Apache
Commons Collections, Java 9, GSON, TestLink, Inter Process Communication (IPC),
Logo, PySpark, Google Tag Manager, Free IFSC Code, SAP Workflow"/>
<meta name = "Keywords" content = "Python Data Science, Java i18n, GitLab,
TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Gson,
TestLink, Inter Process Communication (IPC), Logo"/>
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href="/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
</script>
</body>
</html>
Permintaan POST digunakan untuk mengirim data ke server; misalnya, informasi pelanggan, unggahan file, dll., menggunakan formulir HTML.
API HttpClient menyediakan kelas bernama HttpPost yang mewakili permintaan POST.
Ikuti langkah-langkah yang diberikan di bawah ini untuk mengirim permintaan HTTP POST menggunakan pustaka HttpClient.
Langkah 1 - Buat Objek HttpClient
Itu createDefault() metode dari HttpClients kelas mengembalikan objek kelas CloseableHttpClient, yang merupakan implementasi dasar dari HttpClient antarmuka.
Menggunakan metode ini, buat objek HttpClient.
CloseableHttpClient httpClient = HttpClients.createDefault();
Langkah 2 - Buat Objek HttpPost
Itu HttpPost kelas mewakili HTTP POSTpermintaan. Ini mengirimkan data yang diperlukan dan mengambil informasi dari server yang diberikan menggunakan URI.
Buat permintaan ini dengan membuat instance HttpPost kelas dan meneruskan nilai string yang mewakili URI, sebagai parameter ke konstruktornya.
HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");
Langkah 3 - Jalankan Permintaan Dapatkan
Itu execute() metode objek CloseableHttpClient menerima objek HttpUriRequest (antarmuka) (yaitu HttpGet, HttpPost, HttpPut, HttpHead dll.) dan mengembalikan objek respons.
HttpResponse httpResponse = httpclient.execute(httpget);
Contoh
Berikut adalah contoh yang menunjukkan eksekusi permintaan HTTP POST menggunakan pustaka HttpClient.
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpPostExample {
public static void main(String args[]) throws Exception{
//Creating a HttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating a HttpGet object
HttpPost httppost = new HttpPost("https://www.tutorialspoint.com/");
//Printing the method used
System.out.println("Request Type: "+httppost.getMethod());
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httppost);
Scanner sc = new Scanner(httpresponse.getEntity().getContent());
//Printing the status line
System.out.println(httpresponse.getStatusLine());
while(sc.hasNext()) {
System.out.println(sc.nextLine());
}
}
}
Keluaran
Program di atas menghasilkan keluaran sebagai berikut.
Request Type: POST
<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<title>Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java
i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible,
LOLCODE, Current Affairs 2018, Apache Commons Collections</title>
<meta name = "Description" content = "Parallax Scrolling, Java Cryptography, YAML,
Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common
CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Intellij Idea, Apache
Commons Collections, Java 9, GSON, TestLink, Inter Process Communication (IPC),
Logo, PySpark, Google Tag Manager, Free IFSC Code, SAP Workflow"/>
<meta name = "Keywords" content="Python Data Science, Java i18n, GitLab,
TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Gson,
TestLink, Inter Process Communication (IPC), Logo"/>
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" conten t= "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
</script>
</body>
</html>
Memproses respons HTTP menggunakan penangan respons direkomendasikan. Dalam bab ini, kita akan membahas cara membuat penangan respons dan cara menggunakannya untuk memproses respons.
Jika Anda menggunakan penangan respons, semua koneksi HTTP akan dilepaskan secara otomatis.
Membuat penangan respons
API HttpClient menyediakan antarmuka yang dikenal sebagai ResponseHandler di dalam paket org.apache.http.client. Untuk membuat penangan respons, implementasikan antarmuka ini dan ganti handleResponse() metode.
Setiap tanggapan memiliki kode status dan jika kode status antara 200 dan 300, itu berarti tindakan berhasil diterima, dipahami, dan diterima. Oleh karena itu, dalam contoh kami, kami akan menangani entitas tanggapan dengan kode status tersebut.
Mengeksekusi permintaan menggunakan penangan respons
Ikuti langkah-langkah yang diberikan di bawah ini untuk menjalankan permintaan menggunakan penangan respons.
Langkah 1 - Buat Objek HttpClient
Itu createDefault() metode dari HttpClients kelas mengembalikan objek kelas CloseableHttpClient, yang merupakan implementasi dasar dari HttpClientantarmuka. Menggunakan metode ini membuat objek HttpClient
CloseableHttpClient httpclient = HttpClients.createDefault();
Langkah 2 - Buat Instansiasi Penangan Respons
Instantiate objek penangan respons yang dibuat di atas menggunakan baris kode berikut -
ResponseHandler<String> responseHandler = new MyResponseHandler();
Langkah 3 - Buat Objek HttpGet
Itu HttpGet class mewakili permintaan HTTP GET yang mengambil informasi dari server yang diberikan menggunakan URI.
Buat permintaan HttpGet dengan membuat instance kelas HttpGet dan dengan meneruskan string yang mewakili URI sebagai parameter ke konstruktornya.
ResponseHandler<String> responseHandler = new MyResponseHandler();
Langkah 4 - Jalankan permintaan Dapatkan menggunakan penangan respons
Itu CloseableHttpClient kelas memiliki varian execute() metode yang menerima dua objek ResponseHandler dan HttpUriRequest, serta mengembalikan objek respons.
String httpResponse = httpclient.execute(httpget, responseHandler);
Contoh
Contoh berikut menunjukkan penggunaan penangan respons.
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
class MyResponseHandler implements ResponseHandler<String>{
public String handleResponse(final HttpResponse response) throws IOException{
//Get the status of the response
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
if(entity == null) {
return "";
} else {
return EntityUtils.toString(entity);
}
} else {
return ""+status;
}
}
}
public class ResponseHandlerExample {
public static void main(String args[]) throws Exception{
//Create an HttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//instantiate the response handler
ResponseHandler<String> responseHandler = new MyResponseHandler();
//Create an HttpGet object
HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");
//Execute the Get request by passing the response handler object and HttpGet object
String httpresponse = httpclient.execute(httpget, responseHandler);
System.out.println(httpresponse);
}
}
Keluaran
Program di atas menghasilkan keluaran sebagai berikut -
<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-232293-17');
</script>
</body>
Jika Anda memproses tanggapan HTTP secara manual alih-alih menggunakan penangan tanggapan, Anda harus menutup semua koneksi http sendiri. Bab ini menjelaskan cara menutup koneksi secara manual.
Saat menutup koneksi HTTP secara manual ikuti langkah-langkah yang diberikan di bawah ini -
Langkah 1 - Buat objek HttpClient
Itu createDefault() metode dari HttpClients kelas mengembalikan objek kelas CloseableHttpClient, yang merupakan implementasi dasar dari antarmuka HttpClient.
Menggunakan metode ini, buat file HttpClient objek seperti yang ditunjukkan di bawah ini -
CloseableHttpClient httpClient = HttpClients.createDefault();
Langkah 2 - Mulai blok coba-akhirnya
Mulai blok percobaan-akhirnya, tulis kode yang tersisa di program di blok percobaan dan tutup objek CloseableHttpClient di blok akhirnya.
CloseableHttpClient httpClient = HttpClients.createDefault();
try{
//Remaining code . . . . . . . . . . . . . . .
}finally{
httpClient.close();
}
Langkah 3 - Buat HttpGetobject
Itu HttpGet class mewakili permintaan HTTP GET yang mengambil informasi dari server yang diberikan menggunakan URI.
Buat permintaan HTTP GET dengan membuat instance kelas HttpGet dengan meneruskan string yang mewakili URI.
HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");
Langkah 4 - Jalankan permintaan Dapatkan
Itu execute() metode dari CloseableHttpClient objek menerima a HttpUriRequest (antarmuka) objek (yaitu HttpGet, HttpPost, HttpPut, HttpHead dll.) dan mengembalikan objek respons.
Jalankan permintaan menggunakan metode yang diberikan -
HttpResponse httpResponse = httpclient.execute(httpGet);
Langkah 5 - Mulai coba lagi (bersarang) - akhirnya
Mulai blok coba-akhirnya lagi (bersarang di dalam percobaan-akhirnya), tulis kode yang tersisa di program di blok percobaan ini dan tutup objek HttpResponse di blok akhirnya.
CloseableHttpClient httpclient = HttpClients.createDefault();
try{
. . . . . . .
. . . . . . .
CloseableHttpResponse httpresponse = httpclient.execute(httpget);
try{
. . . . . . .
. . . . . . .
}finally{
httpresponse.close();
}
}finally{
httpclient.close();
}
Contoh
Setiap kali Anda membuat / mendapatkan objek seperti request, response stream, dll., Mulai coba blok terakhir di baris berikutnya, tulis kode yang tersisa dalam percobaan dan tutup objek terkait di blok terakhir seperti yang ditunjukkan dalam program berikut -
import java.util.Scanner;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class CloseConnectionExample {
public static void main(String args[])throws Exception{
//Create an HttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
try{
//Create an HttpGet object
HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");
//Execute the Get request
CloseableHttpResponse httpresponse = httpclient.execute(httpget);
try{
Scanner sc = new Scanner(httpresponse.getEntity().getContent());
while(sc.hasNext()) {
System.out.println(sc.nextLine());
}
}finally{
httpresponse.close();
}
}finally{
httpclient.close();
}
}
}
Keluaran
Saat menjalankan program di atas, output berikut dihasilkan -
<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-232293-17');
</script>
</body>
</html>
Anda dapat membatalkan permintaan HTTP saat ini menggunakan abort() metode, yaitu, setelah menjalankan metode ini, pada permintaan tertentu, pelaksanaannya akan dibatalkan.
Jika metode ini dipanggil setelah satu eksekusi, respons dari eksekusi tersebut tidak akan terpengaruh dan eksekusi selanjutnya akan dibatalkan.
Contoh
Jika Anda mengamati contoh berikut, kami telah membuat permintaan HttpGet, mencetak format permintaan yang digunakan menggunakan getMethod().
Kemudian, kami telah melakukan eksekusi lain dengan permintaan yang sama. Dicetak baris status menggunakan 1 st eksekusi lagi. Akhirnya, mencetak baris status dari eksekusi kedua.
Sebagaimana dibahas, tanggapan dari 1 st eksekusi (eksekusi sebelum metode batalkan) dicetak (termasuk baris kedua status itu ditulis setelah metode batalkan) dan, semua eksekusi berikutnya dari permintaan saat setelah metode batalkan gagal menerapkan suatu pengecualian.
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpGetExample {
public static void main(String args[]) throws Exception{
//Creating an HttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating an HttpGet object
HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");
//Printing the method used
System.out.println(httpget.getMethod());
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
//Printing the status line
System.out.println(httpresponse.getStatusLine());
httpget.abort();
System.out.println(httpresponse.getEntity().getContentLength());
//Executing the Get request
HttpResponse httpresponse2 = httpclient.execute(httpget);
System.out.println(httpresponse2.getStatusLine());
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran berikut -
On executing, the above program generates the following output.
GET
HTTP/1.1 200 OK
-1
Exception in thread "main" org.apache.http.impl.execchain.RequestAbortedException:
Request aborted
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:180)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at HttpGetExample.main(HttpGetExample.java:32)
Interceptor adalah mereka yang membantu menghalangi atau mengubah permintaan atau tanggapan. Interceptors protokol pada umumnya bertindak atas header tertentu atau sekelompok header terkait. Perpustakaan HttpClient menyediakan dukungan untuk interseptor.
Minta interseptor
Itu HttpRequestInterceptorantarmuka mewakili interseptor permintaan. Antarmuka ini berisi metode yang dikenal sebagai proses di mana Anda perlu menulis potongan kode untuk mencegat permintaan.
Di sisi klien, metode ini memverifikasi / memproses permintaan sebelum mengirimnya ke server dan, di sisi server, metode ini dijalankan sebelum mengevaluasi isi permintaan.
Membuat interseptor permintaan
Anda dapat membuat interseptor permintaan dengan mengikuti langkah-langkah yang diberikan di bawah ini.
Step 1 - Create an object of HttpRequestInterceptor
Buat objek antarmuka HttpRequestInterceptor dengan menerapkan proses metode abstraknya.
HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
//Method implementation . . . . .
};
Step 2 - Instantiate CloseableHttpClient object
Bangun kebiasaan CloseableHttpClient objek dengan menambahkan interseptor yang dibuat di atas untuk itu seperti yang ditunjukkan di bawah ini -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();
Dengan menggunakan objek ini, Anda bisa menjalankan permintaan eksekusi seperti biasa.
Contoh
Contoh berikut menunjukkan penggunaan interseptor permintaan. Dalam contoh ini, kami telah membuat objek permintaan HTTP GET dan menambahkan tiga header: sample-header, demoheader, dan test-header padanya.
Dalam processor()metode pencegat, kami memverifikasi header permintaan yang dikirim; jika salah satu dari header tersebut adalahsample-header, kami mencoba untuk menghapusnya dan menampilkan daftar tajuk permintaan khusus tersebut.
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HttpContext;
public class InterceptorsExample {
public static void main(String args[]) throws Exception{
//Creating an HttpRequestInterceptor
HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
if(request.containsHeader("sample-header")) {
System.out.println("Contains header sample-header, removing it..");
request.removeHeaders("sample-header");
}
//Printing remaining list of headers
Header[] headers= request.getAllHeaders();
for (int i = 0; i<headers.length;i++) {
System.out.println(headers[i].getName());
}
}
};
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();
//Creating a request object
HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/");
//Setting the header to it
httpget1.setHeader(new BasicHeader("sample-header","My first header"));
httpget1.setHeader(new BasicHeader("demo-header","My second header"));
httpget1.setHeader(new BasicHeader("test-header","My third header"));
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget1);
//Printing the status line
System.out.println(httpresponse.getStatusLine());
}
}
Keluaran
Saat menjalankan program di atas, output berikut dihasilkan -
Contains header sample-header, removing it..
demo-header
test-header
HTTP/1.1 200 OK
Interceptor respon
Itu HttpResponseInterceptorantarmuka mewakili interseptor respons. Antarmuka ini berisi metode yang dikenal sebagaiprocess(). Dalam metode ini, Anda perlu menulis potongan kode untuk mencegat respons.
Di sisi server, metode ini memverifikasi / memproses respons sebelum mengirimnya ke klien, dan di sisi klien, metode ini dijalankan sebelum mengevaluasi isi respons.
Membuat pencegat respons
Anda dapat membuat pencegat respons dengan mengikuti langkah-langkah yang diberikan di bawah ini -
Step 1 - Create an object of HttpResponseInterceptor
Buat objek dari HttpResponseInterceptor antarmuka dengan menerapkan metode abstraknya process.
HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
@Override
public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
//Method implementation . . . . . . . .
}
};
Langkah 2: Buat instance objek CloseableHttpClient
Bangun kebiasaan CloseableHttpClient objek dengan menambahkan interceptor yang dibuat di atas, seperti yang ditunjukkan di bawah ini -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(responseInterceptor).build();
Dengan menggunakan objek ini, Anda bisa menjalankan permintaan eksekusi seperti biasa.
Contoh
Contoh berikut menunjukkan penggunaan pencegat respons. Dalam contoh ini, kami telah menambahkan tiga header: sample-header, demo-header, dan test-header ke respons di prosesor.
Setelah menjalankan permintaan dan mendapatkan respons, kami mencetak nama semua header respons menggunakan getAllHeaders() metode.
Dan dalam outputnya, Anda dapat mengamati nama dari tiga header dalam daftar.
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.HttpContext;
public class ResponseInterceptorsExample {
public static void main(String args[]) throws Exception{
//Creating an HttpRequestInterceptor
HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
@Override
public void process(HttpResponse response, HttpContext context) throws
HttpException, IOException {
System.out.println("Adding header sample_header, demo-header, test_header to the response");
response.setHeader("sample-header", "My first header");
response.setHeader("demo-header", "My second header");
response.setHeader("test-header", "My third header");
}
};
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.custom().addInterceptorFirst(responseInterceptor).build();
//Creating a request object
HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/");
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget1);
//Printing remaining list of headers
Header[] headers = httpresponse.getAllHeaders();
for (int i = 0; i<headers.length;i++) {
System.out.println(headers[i].getName());
}
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan hasil sebagai berikut -
On executing the above program generates the following output.
Adding header sample_header, demo-header, test_header to the response
Accept-Ranges
Access-Control-Allow-Headers
Access-Control-Allow-Origin
Cache-Control
Content-Type
Date
Expires
Last-Modified
Server
Vary
X-Cache
sample-header
demo-header
test-header
Dengan menggunakan HttpClient, Anda dapat terhubung ke situs web yang membutuhkan nama pengguna dan kata sandi. Bab ini menjelaskan, bagaimana menjalankan permintaan klien terhadap situs yang meminta nama pengguna dan kata sandi.
Langkah 1 - Buat objek CredentialsProvider
Itu CredentialsProviderAntarmuka memelihara koleksi untuk menyimpan kredensial login pengguna. Anda dapat membuat objeknya dengan membuat instanceBasicCredentialsProvider kelas, implementasi default dari antarmuka ini.
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
Langkah 2 - Tetapkan Kredensial
Anda dapat menyetel kredensial yang diperlukan ke objek CredentialsProvider menggunakan setCredentials() metode.
Metode ini menerima dua objek seperti yang diberikan di bawah ini -
AuthScope object - Cakupan otentikasi yang menentukan detail seperti nama host, nomor port, dan nama skema otentikasi.
Credentials object - Menentukan kredensial (nama pengguna, kata sandi).
Tetapkan kredensial menggunakan setCredentials() metode untuk host dan proxy seperti yang ditunjukkan di bawah ini -
credsProvider.setCredentials(new AuthScope("example.com", 80),
new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000),
new UsernamePasswordCredentials("abc", "passwd"));
Langkah 3 - Buat Objek HttpClientBuilder
Membuat HttpClientBuilder menggunakan custom() metode dari HttpClients kelas.
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Langkah 4 - Tetapkan kredensialPovider
Anda dapat menyetel objek credentialsPovider yang dibuat di atas ke HttpClientBuilder menggunakan setDefaultCredentialsProvider() metode.
Setel objek CredentialProvider yang dibuat pada langkah sebelumnya ke pembuat klien dengan meneruskannya ke CredentialsProvider object() metode seperti yang ditunjukkan di bawah ini.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Langkah 5 - Bangun CloseableHttpClient
Bangun CloseableHttpClient objek menggunakan build() metode dari HttpClientBuilder kelas.
CloseableHttpClient httpclient = clientbuilder.build()
Langkah 6 - Buat objek HttpGet dan jalankan
Buat objek HttpRequest dengan membuat instance kelas HttpGet. Jalankan permintaan ini menggunakanexecute() metode.
//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
Contoh
Berikut adalah contoh program yang mendemonstrasikan eksekusi permintaan HTTP terhadap situs target yang membutuhkan otentikasi pengguna.
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
public class UserAuthenticationExample {
public static void main(String args[]) throws Exception{
//Create an object of credentialsProvider
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
//Set the credentials
AuthScope scope = new AuthScope("https://www.tutorialspoint.com/questions/", 80);
Credentials credentials = new UsernamePasswordCredentials("USERNAME", "PASSWORD");
credentialsPovider.setCredentials(scope,credentials);
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the credentials
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credentialsPovider);
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder.build();
//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/questions/index.php");
//Printing the method used
System.out.println(httpget.getMethod());
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
//Printing the status line
System.out.println(httpresponse.getStatusLine());
int statusCode = httpresponse.getStatusLine().getStatusCode();
System.out.println(statusCode);
Header[] headers= httpresponse.getAllHeaders();
for (int i = 0; i<headers.length;i++) {
System.out.println(headers[i].getName());
}
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran sebagai berikut.
GET
HTTP/1.1 200 OK
200
Server proxy adalah server perantara antara klien dan internet. Server proxy menawarkan fungsi dasar berikut -
Pemfilteran data firewall dan jaringan
Berbagi koneksi jaringan
Caching data
Menggunakan pustaka HttpClient, Anda dapat mengirim permintaan HTTP menggunakan proxy. Ikuti langkah-langkah yang diberikan di bawah ini -
Langkah 1 - Buat objek HttpHost
Instantiate HttpHost kelas dari org.apache.http paket dengan melewatkan parameter string yang mewakili nama host proxy, (dari mana Anda memerlukan permintaan untuk dikirim) ke konstruktornya.
//Creating an HttpHost object for proxy
HttpHost proxyHost = new HttpHost("localhost");
Dengan cara yang sama, buat objek HttpHost lain untuk mewakili host target yang permintaannya perlu dikirim.
//Creating an HttpHost object for target
HttpHost targetHost = new HttpHost("google.com");
Langkah 2 - Buat objek HttpRoutePlanner
Itu HttpRoutePlannerantarmuka menghitung rute ke host tertentu. Buat objek antarmuka ini dengan membuat instanceDefaultProxyRoutePlannerkelas, implementasi antarmuka ini. Sebagai parameter untuk konstruktornya, berikan host proxy yang dibuat di atas -
//creating a RoutePlanner object
HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);
Langkah 3 - Tetapkan perencana rute ke pembuat klien
Menggunakan custom() metode dari HttpClients kelas, buat HttpClientBuilder objek dan, untuk objek ini atur perencana rute yang dibuat di atas, menggunakan setRoutePlanner() metode.
//Setting the route planner to the HttpClientBuilder object
HttpClientBuilder clientBuilder = HttpClients.custom();
clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
Langkah 4 - Bangun objek CloseableHttpClient
Bangun CloseableHttpClient objek dengan memanggil build() metode.
//Building a CloseableHttpClient
CloseableHttpClient httpClient = clientBuilder.build();
Langkah 5 - Buat HttpGetobject
Buat permintaan HTTP GET dengan membuat instance HttpGet kelas.
//Creating an HttpGet object
HttpGet httpGet = new HttpGet("/");
Langkah 6 - Jalankan permintaan
Salah satu varian dari execute() metode menerima HttpHost dan HttpRequestobjek dan menjalankan permintaan. Jalankan permintaan menggunakan metode ini -
//Executing the Get request
HttpResponse httpResponse = httpclient.execute(targetHost, httpGet);
Contoh
Contoh berikut menunjukkan cara mengirim permintaan HTTP ke server melalui proxy. Dalam contoh ini, kami mengirimkan permintaan HTTP GET ke google.com melalui localhost. Kami telah mencetak header tanggapan dan isi tanggapan.
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.routing.HttpRoutePlanner;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
import org.apache.http.util.EntityUtils;
public class RequestViaProxyExample {
public static void main(String args[]) throws Exception{
//Creating an HttpHost object for proxy
HttpHost proxyhost = new HttpHost("localhost");
//Creating an HttpHost object for target
HttpHost targethost = new HttpHost("google.com");
//creating a RoutePlanner object
HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);
//Setting the route planner to the HttpClientBuilder object
HttpClientBuilder clientBuilder = HttpClients.custom();
clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
//Building a CloseableHttpClient
CloseableHttpClient httpclient = clientBuilder.build();
//Creating an HttpGet object
HttpGet httpget = new HttpGet("/");
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(targethost, httpget);
//Printing the status line
System.out.println(httpresponse.getStatusLine());
//Printing all the headers of the response
Header[] headers = httpresponse.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
System.out.println(headers[i]);
}
//Printing the body of the response
HttpEntity entity = httpresponse.getEntity();
if (entity != null) {
System.out.println(EntityUtils.toString(entity));
}
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran berikut -
HTTP/1.1 200 OK
Date: Sun, 23 Dec 2018 10:21:47 GMT
Server: Apache/2.4.9 (Win64) PHP/5.5.13
Last-Modified: Tue, 24 Jun 2014 10:46:24 GMT
ETag: "2e-4fc92abc3c000"
Accept-Ranges: bytes
Content-Length: 46
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
Dalam bab ini, kita akan belajar cara membuat HttpRequest yang diautentikasi menggunakan nama pengguna dan kata sandi dan menyalurkannya melalui proxy ke host target, menggunakan sebuah contoh.
Langkah 1 - Buat objek CredentialsProvider
CredentialsProvider Interface memelihara koleksi untuk menampung kredensial login pengguna. Anda dapat membuat objeknya dengan membuat instance kelas BasicCredentialsProvider, implementasi default antarmuka ini.
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
Langkah 2 - Tetapkan kredensial
Anda dapat menyetel kredensial yang diperlukan ke objek CredentialsProvider menggunakan setCredentials()metode. Metode ini menerima dua objek -
AuthScope object - Cakupan otentikasi yang menentukan detail seperti nama host, nomor port, dan nama skema otentikasi.
Credentials object- Menentukan kredensial (nama pengguna, kata sandi). Tetapkan kredensial menggunakansetCredentials() metode untuk host dan proxy seperti yang ditunjukkan di bawah ini.
credsProvider.setCredentials(new AuthScope("example.com", 80), new
UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), new
UsernamePasswordCredentials("abc", "passwd"));
Langkah 3 - Buat objek HttpClientBuilder
Membuat HttpClientBuilder menggunakan custom() metode dari HttpClients kelas seperti yang ditunjukkan di bawah ini -
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Langkah 4 - Setel CredentialsProvider
Anda bisa menyetel objek CredentialsProvider ke objek HttpClientBuilder menggunakan setDefaultCredentialsProvider()metode. Lulus yang dibuat sebelumnyaCredentialsProvider keberatan dengan metode ini.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Langkah 5 - Bangun CloseableHttpClient
Bangun CloseableHttpClient objek menggunakan build() metode.
CloseableHttpClient httpclient = clientbuilder.build();
Langkah 6 - Buat proxy dan host target
Buat target dan host proxy dengan membuat instance HttpHost kelas.
//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");
Langkah 7 - Setel proxy dan buat objek RequestConfig
Membuat RequestConfig.Builder objek menggunakan custom()metode. Setel objek proxyHost yang dibuat sebelumnya keRequestConfig.Builder menggunakan setProxy()metode. Terakhir, buat fileRequestConfig objek menggunakan build() metode.
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
Langkah 8 - Buat objek permintaan HttpGet dan setel objek config ke sana.
Membuat HttpGetobjek dengan membuat instance kelas HttpGet. Setel objek config yang dibuat pada langkah sebelumnya ke objek ini menggunakansetConfig() metode.
//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
Langkah 9 - Jalankan permintaan
Jalankan permintaan dengan meneruskan objek HttpHost (target) dan request (HttpGet) sebagai parameter ke execute() metode.
HttpResponse httpResponse = httpclient.execute(targetHost, httpget);
Contoh
Contoh berikut menunjukkan cara menjalankan permintaan HTTP melalui proxy menggunakan nama pengguna dan sandi.
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
public class ProxyAuthenticationExample {
public static void main(String[] args) throws Exception {
//Creating the CredentialsProvider object
CredentialsProvider credsProvider = new BasicCredentialsProvider();
//Setting the credentials
credsProvider.setCredentials(new AuthScope("example.com", 80),
new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000),
new UsernamePasswordCredentials("abc", "passwd"));
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the credentials
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder.build();
//Create the target and proxy hosts
HttpHost targetHost = new HttpHost("example.com", 80, "http");
HttpHost proxyHost = new HttpHost("localhost", 8000, "http");
//Setting the proxy
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
//Create the HttpGet request object
HttpGet httpget = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
//Printing the status line
HttpResponse response = httpclient.execute(targetHost, httpget);
System.out.println(response.getStatusLine());
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran berikut -
HTTP/1.1 200 OK
Menggunakan pustaka HttpClient Anda bisa mengirim permintaan atau, masuk ke formulir dengan meneruskan parameter.
Ikuti langkah-langkah yang diberikan di bawah ini untuk masuk ke formulir.
Langkah 1 - Buat objek HttpClient
Itu createDefault() metode dari HttpClients kelas mengembalikan objek kelas CloseableHttpClient, yang merupakan implementasi dasar dari antarmuka HttpClient. Menggunakan metode ini, buat objek HttpClient -
CloseableHttpClient httpClient = HttpClients.createDefault();
Langkah 2 - Buat objek RequestBuilder
Kelas RequestBuilderdigunakan untuk membangun permintaan dengan menambahkan parameter padanya. Jika jenis permintaan adalah PUT atau POST, itu menambahkan parameter ke permintaan sebagai entitas yang dikodekan URL
Buat objek RequestBuilder (jenis POST) menggunakan metode post ().
//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post();
Langkah 3 - Atur Uri dan parameter ke RequestBuilder.
Setel URI dan parameter ke objek RequestBuilder menggunakan setUri() dan addParameter() metode kelas RequestBuilder.
//Set URI and parameters
RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post");
reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");
Langkah 4 - Bangun objek HttpUriRequest
Setelah mengatur parameter yang diperlukan, buat file HttpUriRequest objek menggunakan build() metode.
//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();
Langkah 5 - Jalankan permintaan
Metode eksekusi objek CloseableHttpClient menerima objek HttpUriRequest (antarmuka) (yaitu HttpGet, HttpPost, HttpPut, HttpHead, dll.) Dan mengembalikan objek respons.
Jalankan HttpUriRequest yang dibuat di langkah sebelumnya dengan meneruskannya ke execute() metode.
//Execute the request
HttpResponse httpresponse = httpclient.execute(httppost);
Contoh
Contoh berikut menunjukkan cara masuk ke formulir dengan mengirimkan kredensial masuk. Di sini, kami telah mengirimkan dua parameter -username and password ke formulir dan mencoba mencetak entitas pesan dan status permintaan.
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
public class FormLoginExample {
public static void main(String args[]) throws Exception {
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating the RequestBuilder object
RequestBuilder reqbuilder = RequestBuilder.post();
//Setting URI and parameters
RequestBuilder reqbuilder1 = reqbuilder.setUri("http://httpbin.org/post");
RequestBuilder reqbuilder2 = reqbuilder1.addParameter("Name",
"username").addParameter("password", "password");
//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();
//Executing the request
HttpResponse httpresponse = httpclient.execute(httppost);
//Printing the status and the contents of the response
System.out.println(EntityUtils.toString(httpresponse.getEntity()));
System.out.println(httpresponse.getStatusLine());
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran berikut -
{
"args": {},
"data": "",
"files": {},
"form": {
"Name": "username",
"password": "password"
},
"headers": {
"Accept-Encoding": "gzip,deflate",
"Connection": "close",
"Content-Length": "31",
"Content-Type": "application/x-www-form-urlencoded; charset = UTF-8",
"Host": "httpbin.org",
"User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
},
"json": null,
"origin": "117.216.245.180",
"url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK
Formulir Login dengan Cookies
Jika formulir Anda menyimpan cookie, bukan membuat default CloseableHttpClient obyek.
Create a CookieStore object dengan membuat instance kelas BasicCookieStore.
//Creating a BasicCookieStore object
BasicCookieStore cookieStore = new BasicCookieStore();
Create a HttpClientBuilder menggunakan custom() metode dari HttpClients kelas.
//Creating an HttpClientBuilder object
HttpClientBuilder clientbuilder = HttpClients.custom();
Set the cookie store to the client builder menggunakan metode setDefaultCookieStore ().
//Setting default cookie store to the client builder object
Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);
Bangun CloseableHttpClient objek menggunakan build() metode.
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder1.build();
Bangun HttpUriRequest objek seperti yang ditentukan di atas dengan melewatkan mengeksekusi permintaan.
Jika halaman menyimpan cookie, parameter yang telah Anda berikan akan ditambahkan ke penyimpanan cookie.
Anda dapat mencetak konten file CookieStore objek di mana Anda dapat melihat parameter Anda (bersama dengan yang sebelumnya halaman disimpan dalam kasus).
Untuk mencetak cookie, dapatkan semua cookie dari CookieStore objek menggunakan getCookies()metode. Metode ini mengembalikan fileListobyek. Menggunakan Iterator, cetak konten objek daftar seperti yang ditunjukkan di bawah ini -
//Printing the cookies
List list = cookieStore.getCookies();
System.out.println("list of cookies");
Iterator it = list.iterator();
if(it.hasNext()) {
System.out.println(it.next());
}
Cookies adalah file teks yang disimpan di komputer klien dan disimpan untuk berbagai tujuan pelacakan informasi.
HttpClient menyediakan dukungan untuk cookie Anda dapat membuat dan mengelola cookie.
Membuat cookie
Ikuti langkah-langkah yang diberikan di bawah ini untuk membuat cookie menggunakan perpustakaan HttpClient.
Langkah 1 - Buat objek Cookiestore
Itu CookieStoreantarmuka mewakili penyimpanan abstrak untuk objek Cookie. Anda dapat membuat penyimpanan cookie dengan membuat instanceBasicCookieStore kelas, implementasi default dari antarmuka ini.
//Creating the CookieStore object
CookieStore cookieStore = new BasicCookieStore();
Langkah 2 - Buat objek ClientCookie
Selain fungsi cookie, ClientCookie bisa mendapatkan cookie asli di server. Anda dapat membuat cookie klien dengan membuat instanceBasicClientCookiekelas. Untuk konstruktor kelas ini, Anda harus meneruskan pasangan nilai kunci yang ingin Anda simpan dalam cookie tersebut.
//Creating client cookie
BasicClientCookie clientCookie = new BasicClientCookie("name","Raju");
Langkah 3 - Tetapkan nilai ke cookie
Untuk cookie klien, Anda dapat menyetel / menghapus jalur, nilai, versi, tanggal kedaluwarsa, domain, komentar, dan atribut menggunakan metode masing-masing.
Calendar myCal = new GregorianCalendar(2018, 9, 26);
Date expiryDate = myCal.getTime();
clientcookie.setExpiryDate(expiryDate);
clientcookie.setPath("/");
clientcookie.setSecure(true);
clientcookie.setValue("25");
clientcookie.setVersion(5);
Langkah 4 - Tambahkan cookie ke penyimpanan cookie
Anda dapat menambahkan cookie ke penyimpanan cookie menggunakan addCookie() metode dari BasicCookieStore kelas.
Tambahkan cookie yang diperlukan ke Cookiestore.
//Adding the created cookies to cookie store
cookiestore.addCookie(clientcookie);
Contoh
Contoh berikut menunjukkan cara membuat cookie dan menambahkannya ke penyimpanan cookie. Di sini, kami membuat penyimpanan cookie, sekumpulan cookie dengan menyetel nilai domain dan jalur, dan menambahkannya ke penyimpanan cookie.
import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;
public class CookieHandlingExample {
public static void main(String args[]) throws Exception{
//Creating the CookieStore object
CookieStore cookiestore = new BasicCookieStore();
//Creating client cookies
BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju");
BasicClientCookie clientcookie2 = new BasicClientCookie("age","28");
BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad");
//Setting domains and paths to the created cookies
clientcookie1.setDomain(".sample.com");
clientcookie2.setDomain(".sample.com");
clientcookie3.setDomain(".sample.com");
clientcookie1.setPath("/");
clientcookie2.setPath("/");
clientcookie3.setPath("/");
//Adding the created cookies to cookie store
cookiestore.addCookie(clientcookie1);
cookiestore.addCookie(clientcookie2);
cookiestore.addCookie(clientcookie3);
}
}
Mengambil cookie
Anda bisa mendapatkan cookie yang ditambahkan ke penyimpanan cookie menggunakan getCookies() metode dari asicCookieStorekelas. Metode ini mengembalikan daftar yang menyimpan semua cookie di penyimpanan cookie.
Anda dapat mencetak konten penyimpanan cookie menggunakan Iterator seperti yang ditunjukkan di bawah ini -
//Retrieving the cookies
List list = cookieStore.getCookies();
//Creating an iterator to the obtained list
Iterator it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
Contoh
Contoh berikut menunjukkan cara mengambil cookie dari penyimpanan cookie. Di sini, kami menambahkan sekumpulan cookie ke penyimpanan cookie dan mengambilnya kembali.
import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;
public class CookieHandlingExample {
public static void main(String args[]) throws Exception{
//Creating the CookieStore object
CookieStore cookiestore = new BasicCookieStore();
//Creating client cookies
BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju");
BasicClientCookie clientcookie2 = new BasicClientCookie("age","28");
BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad");
//Setting domains and paths to the created cookies
clientcookie1.setDomain(".sample.com");
clientcookie2.setDomain(".sample.com");
clientcookie3.setDomain(".sample.com");
clientcookie1.setPath("/");
clientcookie2.setPath("/");
clientcookie3.setPath("/");
//Adding the created cookies to cookie store
cookiestore.addCookie(clientcookie1);
cookiestore.addCookie(clientcookie2);
cookiestore.addCookie(clientcookie3);
}
}
Keluaran
Saat menjalankan, program ini menghasilkan keluaran berikut -
[version: 0][name: age][value: 28][domain: .sample.com][path: /][expiry: null]
[version: 0][name: name][value: Raju][domain: my.example.com][path: /][expiry:
null]
[version: 0][name: place][value: Hyderabad][domain: .sample.com][path:
/][expiry: null]
Program multi-utas berisi dua atau lebih bagian yang dapat berjalan secara bersamaan dan setiap bagian dapat menangani tugas yang berbeda pada saat yang sama memanfaatkan sumber daya yang tersedia secara optimal.
Anda dapat menjalankan permintaan dari beberapa utas dengan menulis program HttpClient multithread.
Jika Anda ingin menjalankan beberapa permintaan klien dari utas secara berurutan, Anda perlu membuat file ClientConnectionPoolManager. Itu mempertahankan kolamHttpClientConnections dan melayani banyak permintaan dari utas.
Manajer koneksi mengumpulkan koneksi berdasarkan rute. Jika pengelola memiliki koneksi untuk rute tertentu, maka ia melayani permintaan baru di rute tersebut dengan menyewa koneksi yang ada dari kumpulan, alih-alih membuat yang baru.
Ikuti langkah-langkah untuk menjalankan permintaan dari beberapa utas -
Langkah 1 - Membuat Manajer Pool Koneksi Klien
Buat Client Connection Pool Manager dengan membuat instance PoolingHttpClientConnectionManager kelas.
PoolingHttpClientConnectionManager connManager = new
PoolingHttpClientConnectionManager();
Langkah 2 - Tetapkan jumlah koneksi maksimum
Tetapkan jumlah maksimum koneksi di pangkalan menggunakan setMaxTotal() metode.
//Set the maximum number of connections in the pool
connManager.setMaxTotal(100);
Langkah 3 - Buat Objek ClientBuilder
Membuat ClientBuilder Objek dengan mengatur manajer koneksi menggunakan setConnectionManager() metode seperti yang ditunjukkan di bawah ini -
HttpClientBuilder clientbuilder =
HttpClients.custom().setConnectionManager(connManager);
Langkah 4 - Buat objek permintaan HttpGet
Buat instance kelas HttpGet dengan meneruskan URI yang diinginkan ke konstruktornya sebagai parameter.
HttpGet httpget1 = new HttpGet("URI1");
HttpGet httpget2 = new HttpGet("URI2");
. . . . . . . . . . . .
Langkah 5 - Menerapkan metode run
Pastikan Anda telah membuat kelas, menjadikannya sebagai thread (baik dengan memperluas kelas thread atau, dengan mengimplementasikan antarmuka Runnable) dan menerapkan metode run.
public class ClientMultiThreaded extends Thread {
public void run() {
//Run method implementation . . . . . . . . . .
}
}
Langkah 6 - Buat objek Thread
Buat objek thread dengan membuat instance kelas Thread (ClientMultiThreaded) yang dibuat di atas.
Meneruskan objek HttpClient, masing-masing objek HttpGet dan, integer yang mewakili ID ke utas ini.
ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1);
ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2);
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Langkah 7 - Mulai dan gabungkan utas
Mulai semua utas menggunakan start() metode dan bergabunglah dengan mereka menggunakan bergabung method().
thread1.start();
thread2.start();
. . . . . . . .
thread1.join();
thread2.join();
. . . . . . . . . . . .
Langkah 8 - Jalankan implementasi metode
Di dalam metode run, jalankan permintaan, ambil respon dan cetak hasilnya.
Contoh
Contoh berikut menunjukkan eksekusi permintaan HTTP secara bersamaan dari beberapa utas. Dalam contoh ini, kami mencoba menjalankan berbagai permintaan dari berbagai utas dan mencoba mencetak status, dan jumlah byte yang dibaca oleh setiap klien.
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
public class ClientMultiThreaded extends Thread {
CloseableHttpClient httpClient;
HttpGet httpget;
int id;
public ClientMultiThreaded(CloseableHttpClient httpClient, HttpGet httpget,
int id) {
this.httpClient = httpClient;
this.httpget = httpget;
this.id = id;
}
@Override
public void run() {
try{
//Executing the request
CloseableHttpResponse httpresponse = httpClient.execute(httpget);
//Displaying the status of the request.
System.out.println("status of thread "+id+":"+httpresponse.getStatusLine());
//Retrieving the HttpEntity and displaying the no.of bytes read
HttpEntity entity = httpresponse.getEntity();
if (entity != null) {
System.out.println("Bytes read by thread thread "+id+":
"+EntityUtils.toByteArray(entity).length);
}
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception {
//Creating the Client Connection Pool Manager by instantiating the PoolingHttpClientConnectionManager class.
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
//Set the maximum number of connections in the pool
connManager.setMaxTotal(100);
//Create a ClientBuilder Object by setting the connection manager
HttpClientBuilder clientbuilder = HttpClients.custom().setConnectionManager(connManager);
//Build the CloseableHttpClient object using the build() method.
CloseableHttpClient httpclient = clientbuilder.build();
//Creating the HttpGet requests
HttpGet httpget1 = new HttpGet("http://www.tutorialspoint.com/");
HttpGet httpget2 = new HttpGet("http://www.google.com/");
HttpGet httpget3 = new HttpGet("https://www.qries.com/");
HttpGet httpget4 = new HttpGet("https://in.yahoo.com/");
//Creating the Thread objects
ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1);
ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2);
ClientMultiThreaded thread3 = new ClientMultiThreaded(httpclient,httpget3, 3);
ClientMultiThreaded thread4 = new ClientMultiThreaded(httpclient,httpget4, 4);
//Starting all the threads
thread1.start();
thread2.start();
thread3.start();
thread4.start();
//Joining all the threads
thread1.join();
thread2.join();
thread3.join();
thread4.join();
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran berikut -
status of thread 1: HTTP/1.1 200 OK
Bytes read by thread thread 1: 36907
status of thread 2: HTTP/1.1 200 OK
Bytes read by thread thread 2: 13725
status of thread 3: HTTP/1.1 200 OK
Bytes read by thread thread 3: 17319
status of thread 4: HTTP/1.1 200 OK
Bytes read by thread thread 4: 127018
Dengan menggunakan Secure Socket Layer, Anda dapat membuat sambungan aman antara klien dan server. Ini membantu untuk melindungi informasi sensitif seperti nomor kartu kredit, nama pengguna, kata sandi, pin, dll.
Anda dapat membuat koneksi lebih aman dengan membuat konteks SSL Anda sendiri menggunakan HttpClient Perpustakaan.
Ikuti langkah-langkah yang diberikan di bawah ini untuk menyesuaikan SSLContext menggunakan perpustakaan HttpClient -
Langkah 1 - Buat objek SSLContextBuilder
SSLContextBuilderadalah pembangun untuk objek SSLContext. Buat objeknya menggunakancustom() metode dari SSLContexts kelas.
//Creating SSLContextBuilder object
SSLContextBuilder SSLBuilder = SSLContexts.custom();
Langkah 2 - Muat Keystore
Di jalan Java_home_directory/jre/lib/security/, Anda dapat menemukan file bernama cacerts. Simpan ini sebagai file penyimpanan kunci Anda (dengan ekstensi .jks). Muat file keystore dan kata sandinya (yaituchangeit secara default) menggunakan loadTrustMaterial() metode dari SSLContextBuilder kelas.
//Loading the Keystore file
File file = new File("mykeystore.jks");
SSLBuilder = SSLBuilder.loadTrustMaterial(file, "changeit".toCharArray());
Langkah 3 - membangun objek SSLContext
Objek SSLContext mewakili implementasi protokol soket aman. Bangun SSLContext menggunakanbuild() metode.
//Building the SSLContext
SSLContext sslContext = SSLBuilder.build();
Langkah 4 - Membuat objek SSLConnectionSocketFactory
SSLConnectionSocketFactoryadalah pabrik soket berlapis untuk koneksi TSL dan SSL. Dengan menggunakan ini, Anda dapat memverifikasi server Https menggunakan daftar sertifikat tepercaya dan mengautentikasi server Https yang diberikan.
Anda dapat membuatnya dengan banyak cara. Bergantung pada cara Anda membuat fileSSLConnectionSocketFactory objek, Anda dapat mengizinkan semua host, hanya mengizinkan sertifikat yang ditandatangani sendiri, hanya mengizinkan protokol tertentu, dll.
To allow only particular protocols, buat SSLConnectionSocketFactory objek dengan melewatkan objek SSLContext, larik string yang mewakili protokol perlu didukung, larik string yang mewakili setelan sandi perlu didukung dan objek HostnameVerifier ke konstruktornya.
new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
To allow all hosts, membuat SSLConnectionSocketFactory objek dengan melewatkan objek SSLContext dan a NoopHostnameVerifier obyek.
//Creating SSLConnectionSocketFactory SSLConnectionSocketFactory object
SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
Langkah 5 - Buat objek HttpClientBuilder
Buat objek HttpClientBuilder menggunakan custom() metode dari HttpClients kelas.
//Creating HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Langkah 6 - Setel objek SSLConnectionSocketFactory
Setel objek SSLConnectionSocketFactory ke HttpClientBuilder menggunakan setSSLSocketFactory() metode.
//Setting the SSLConnectionSocketFactory
clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);
Langkah 7 - Bangun objek CloseableHttpClient
Bangun CloseableHttpClient objek dengan memanggil build() metode.
//Building the CloseableHttpClient
CloseableHttpClient httpclient = clientbuilder.build();
Langkah 8 - Buat objek HttpGet
Itu HttpGet class mewakili permintaan HTTP GET yang mengambil informasi dari server yang diberikan menggunakan URI.
Buat permintaan HTTP GET dengan membuat instance kelas HttpGet dengan meneruskan string yang mewakili URI.
//Creating the HttpGet request
HttpGet httpget = new HttpGet("https://example.com/");
Langkah 9 - Jalankan permintaan
Jalankan permintaan menggunakan execute() metode.
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget);
Contoh
Contoh berikut menunjukkan penyesuaian SSLContrext -
import java.io.File;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
public class ClientCustomSSL {
public final static void main(String[] args) throws Exception {
//Creating SSLContextBuilder object
SSLContextBuilder SSLBuilder = SSLContexts.custom();
//Loading the Keystore file
File file = new File("mykeystore.jks");
SSLBuilder = SSLBuilder.loadTrustMaterial(file,
"changeit".toCharArray());
//Building the SSLContext usiong the build() method
SSLContext sslcontext = SSLBuilder.build();
//Creating SSLConnectionSocketFactory object
SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
//Creating HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the SSLConnectionSocketFactory
clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);
//Building the CloseableHttpClient
CloseableHttpClient httpclient = clientbuilder.build();
//Creating the HttpGet request
HttpGet httpget = new HttpGet("https://example.com/");
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget);
//printing the status line
System.out.println(httpresponse.getStatusLine());
//Retrieving the HttpEntity and displaying the no.of bytes read
HttpEntity entity = httpresponse.getEntity();
if (entity != null) {
System.out.println(EntityUtils.toByteArray(entity).length);
}
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran sebagai berikut.
HTTP/1.1 200 OK
1270
Dengan menggunakan HttpClient, kita dapat melakukan unggahan Multipart, yaitu kita dapat mengunggah objek yang lebih besar di bagian yang lebih kecil. Dalam bab ini, kami mendemonstrasikan unggahan multi bagian di klien HTTP dengan mengunggah file teks sederhana.
Secara umum, unggahan multibagian apa pun berisi tiga bagian.
Inisiasi pengunggahan
Mengunggah bagian objek
Menyelesaikan unggahan Multipart
Untuk unggahan multi bagian menggunakan HttpClient, kita perlu mengikuti langkah-langkah di bawah ini -
Buat pembuat multi bagian.
Tambahkan bagian yang diinginkan ke dalamnya.
Selesaikan build dan dapatkan HttpEntity multi bagian.
Buat permintaan dengan mengatur entitas muti-part di atas.
Jalankan permintaan tersebut.
Berikut adalah langkah-langkah untuk mengunggah entitas multi bagian menggunakan pustaka HttpClient.
Langkah 1 - Buat objek HttpClient
Itu createDefault() metode dari HttpClients kelas mengembalikan objek kelas CloseableHttpClient, yang merupakan implementasi dasar dari antarmuka HttpClient. Menggunakan metode ini, buat objek HttpClient -
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
Langkah 2 - Buat objek FileBody
FileBodyclass mewakili bagian tubuh biner yang didukung oleh sebuah file. Instantiate kelas ini dengan meneruskan aFile objek dan a ContentType objek yang mewakili jenis konten.
//Creating a File object
File file = new File("sample.txt");
//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
Langkah 3 - Buat MultipartEntityBuilder
Itu MultipartEntityBuilder kelas digunakan untuk membangun multi-bagian HttpEntityobyek. Buat objeknya menggunakancreate() metode (dari kelas yang sama).
//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
Langkah 4 - Atur mode
SEBUAH MultipartEntityBuildermemiliki tiga mode: STRICT, RFC6532, dan BROWSER_COMPATIBLE. Setel ke mode yang diinginkan menggunakansetMode() metode.
//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
Langkah 5 - Tambahkan berbagai bagian yang diinginkan
Menggunakan metode addTextBody(), addPart () dan, addBinaryBody(), Anda dapat menambahkan teks sederhana, file, aliran, dan objek lain ke file MultipartBuilder. Tambahkan konten yang diinginkan menggunakan metode ini.
//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));
Langkah 6 - Membangun entitas tunggal
Anda dapat membangun semua bagian ini menjadi satu entitas menggunakan build() metode dari MultipartEntityBuilderkelas. Dengan menggunakan metode ini, buat semua bagian menjadi satuHttpEntity.
//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entityBuilder.build();
Langkah 7 - Buat objek RequestBuilder
Kelas RequestBuilderdigunakan untuk membangun permintaan dengan menambahkan parameter padanya. Jika permintaan berjenis PUT atau POST, ia menambahkan parameter ke permintaan sebagai entitas yang dikodekan URL.
Buat objek RequestBuilder (berjenis POST) menggunakan post()metode. Dan berikan Uri yang ingin Anda kirimkan permintaannya sebagai parameter.
//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
Langkah 8 - Setel objek entitas ke RequestBuilder
Setel entitas multi bagian yang dibuat di atas ke RequestBuilder menggunakan setEntity() metode dari RequestBuilder kelas.
//Setting the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);
Langkah 9 - Bangun HttpUriRequest
Membangun sebuah HttpUriRequest meminta objek menggunakan build() metode dari RequestBuilder kelas.
//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();
Langkah 10 - Jalankan permintaan
Menggunakan execute() metode, jalankan permintaan yang dibangun pada langkah sebelumnya (melewati permintaan sebagai parameter untuk metode ini).
//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);
Contoh
Contoh berikut menunjukkan cara mengirim permintaan multi bagian menggunakan perpustakaan HttpClient. Dalam contoh ini, kami mencoba mengirim permintaan multi bagian yang didukung oleh file.
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
public class MultipartUploadExample {
public static void main(String args[]) throws Exception{
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating a file object
File file = new File("sample.txt");
//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));
//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entitybuilder.build();
//Building the RequestBuilder request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
//Set the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);
//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();
//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);
//Printing the status and the contents of the response
System.out.println(EntityUtils.toString(httpresponse.getEntity()));
System.out.println(httpresponse.getStatusLine());
}
}
Keluaran
Saat menjalankan, program di atas menghasilkan keluaran berikut -
{
"args": {},
"data": "",
"files": {
"image": "data:application/octets66PohrH3IWNk1FzpohfdXPIfv9X3490FGcuXsHn9X0piCwomF/xdgADZ9GsfSyvLYAAAAAE
lFTkSuQmCC"
},
"form": {
"sample_text": "This is the text part of our file"
},
"headers": {
"Accept-Encoding": "gzip,deflate",
"Connection": "close",
"Content-Length": "11104",
"Content-Type": "multipart/form-data;
boundary=UFJbPHT7mTwpVq70LpZgCi5I2nvxd1g-I8Rt",
"Host": "httpbin.org",
"User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
},
"json": null,
"origin": "117.216.245.180",
"url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK