Apache HttpClient - คู่มือฉบับย่อ
Hypertext Transfer Protocol (HTTP) เป็นโปรโตคอลระดับแอปพลิเคชันสำหรับระบบข้อมูลแบบกระจายการทำงานร่วมกันและไฮเปอร์มีเดีย นี่เป็นรากฐานสำหรับการสื่อสารข้อมูลสำหรับเวิลด์ไวด์เว็บ (เช่นอินเทอร์เน็ต) ตั้งแต่ปี 1990 HTTP เป็นโปรโตคอลทั่วไปและไร้สัญชาติซึ่งสามารถใช้เพื่อวัตถุประสงค์อื่น ๆ ได้เช่นกันโดยใช้ส่วนขยายของวิธีการร้องขอรหัสข้อผิดพลาดและส่วนหัว
โดยทั่วไป HTTP เป็นโปรโตคอลการสื่อสารที่ใช้ TCP / IP ซึ่งใช้ในการส่งข้อมูล (ไฟล์ HTML ไฟล์รูปภาพผลการสืบค้น ฯลฯ ) บนเวิลด์ไวด์เว็บ พอร์ตเริ่มต้นคือ TCP 80 แต่พอร์ตอื่น ๆ ก็สามารถใช้ได้เช่นกัน เป็นวิธีที่เป็นมาตรฐานสำหรับคอมพิวเตอร์ในการสื่อสารระหว่างกัน ข้อกำหนด HTTP กำหนดวิธีสร้างและส่งข้อมูลคำขอของไคลเอ็นต์ไปยังเซิร์ฟเวอร์และเซิร์ฟเวอร์ตอบสนองต่อคำขอเหล่านี้อย่างไร
ไคลเอนต์ Http คืออะไร
ไคลเอนต์ Http เป็นไลบรารีการถ่ายโอนซึ่งอยู่บนฝั่งไคลเอ็นต์ส่งและรับข้อความ HTTP มีการใช้งานที่ทันสมัยมีคุณสมบัติครบถ้วนและมีประสิทธิภาพซึ่งตรงตามมาตรฐาน HTTP ล่าสุด
นอกจากนี้โดยใช้ไลบรารีไคลเอนต์เราสามารถสร้างแอปพลิเคชันที่ใช้ HTTP เช่นเว็บเบราว์เซอร์ไคลเอนต์บริการเว็บ ฯลฯ
คุณสมบัติของไคลเอนต์ Http
ต่อไปนี้เป็นคุณสมบัติเด่นของไคลเอนต์ Http -
ไลบรารี HttpClient ใช้เมธอด HTTP ที่มีทั้งหมด
ไลบรารี HttpClient จัดเตรียม API เพื่อรักษาความปลอดภัยคำขอโดยใช้โปรโตคอล Secure Socket Layer
การใช้ HttpClient คุณสามารถสร้างการเชื่อมต่อโดยใช้พร็อกซี
คุณสามารถตรวจสอบการเชื่อมต่อโดยใช้รูปแบบการตรวจสอบความถูกต้องเช่น Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session เป็นต้น
ไลบรารี HttpClient สนับสนุนการส่งคำขอผ่านหลายเธรด จัดการการเชื่อมต่อหลายรายการที่สร้างขึ้นจากเธรดต่างๆโดยใช้ClientConnectionPoolManager.
การใช้ไลบรารี Apache HttpClient คุณสามารถตั้งค่าระยะหมดเวลาการเชื่อมต่อ
ในบทนี้เราจะอธิบายวิธีตั้งค่าสภาวะแวดล้อมสำหรับ HttpClient ใน Eclipse IDE ก่อนดำเนินการติดตั้งตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Eclipse ในระบบของคุณแล้ว ถ้าไม่มีให้ดาวน์โหลดและติดตั้ง Eclipse
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Eclipse โปรดดูที่เราสอนคราส
ขั้นตอนที่ 1 - ดาวน์โหลดไฟล์ Dependency JAR
เปิดหน้าแรกอย่างเป็นทางการของเว็บไซต์ HttpClient (ส่วนประกอบ) และไปที่หน้าดาวน์โหลด
จากนั้นดาวน์โหลดเวอร์ชันเสถียรล่าสุดของ HttpClient. ที่นี่ตลอดบทช่วยสอนเราใช้เวอร์ชัน 4.5.6 ดังนั้นดาวน์โหลดไฟล์4.5.6.zip.
ภายในโฟลเดอร์ที่ดาวน์โหลดมาคุณจะพบโฟลเดอร์ชื่อ lib และสิ่งนี้มีไฟล์ Jar ที่จำเป็นซึ่งจะถูกเพิ่มในคลาสพา ธ ของโปรเจ็กต์ของคุณเพื่อทำงานกับ HttpClient
ขั้นตอนที่ 2 - สร้างโครงการและกำหนดเส้นทางการสร้าง
เปิด eclipse และสร้างโครงการตัวอย่าง คลิกขวาที่โครงการเลือกตัวเลือกBuild Path → Configure Build Path ดังแสดงด้านล่าง
ใน Java Build Path กรอบใน Libraries คลิกที่แท็บ Add External JARs.
และเลือกไฟล์ jar ทั้งหมดในโฟลเดอร์ lib และคลิกที่ Apply and Close.
คุณพร้อมให้ทำงานกับไลบรารี HttpClient ใน eclipse
เมธอด GET ใช้เพื่อดึงข้อมูลจากเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI ที่กำหนด คำขอโดยใช้ GET ควรดึงข้อมูลเท่านั้นและไม่ควรมีผลกระทบอื่นใดกับข้อมูล
HttpClient API จัดเตรียมคลาสที่มีชื่อว่า HttpGet ซึ่งแสดงถึงวิธีรับคำขอ
ทำตามขั้นตอนด้านล่างเพื่อส่งคำขอรับโดยใช้ไลบรารี HttpClient
ขั้นตอนที่ 1 - สร้างวัตถุ HttpClient
createDefault() วิธีการของ HttpClients คลาสส่งคืน a CloseableHttpClient ซึ่งเป็นการใช้งานพื้นฐานของไฟล์ HttpClient อินเตอร์เฟซ.
ใช้วิธีนี้สร้างวัตถุ HttpClient ดังที่แสดงด้านล่าง -
CloseableHttpClient httpclient = HttpClients.createDefault();
ขั้นตอนที่ 2 - สร้างวัตถุ HttpGet
HttpGet คลาสแทนคำขอ HTTPGET ซึ่งดึงข้อมูลของเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI
สร้างคำร้องขอ HTTP GET โดยสร้างอินสแตนซ์คลาสนี้ คอนสตรัคเตอร์ของคลาสนี้ยอมรับค่าสตริงที่แสดงถึง URI
HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");
ขั้นตอนที่ 3 - ดำเนินการรับคำขอ
execute() วิธีการของ CloseableHttpClient คลาสยอมรับอ็อบเจ็กต์ HttpUriRequest (อินเตอร์เฟส) (เช่น HttpGet, HttpPost, HttpPut, HttpHead เป็นต้น) และส่งคืนอ็อบเจ็กต์ตอบกลับ
ดำเนินการตามคำขอโดยใช้วิธีนี้ดังที่แสดงด้านล่าง -
HttpResponse httpresponse = httpclient.execute(httpget);
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างที่แสดงให้เห็นถึงการดำเนินการตามคำขอ HTTP GET โดยใช้ไลบรารี 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());
}
}
}
เอาต์พุต
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -
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>
คำขอ POST ใช้เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ ตัวอย่างเช่นข้อมูลลูกค้าการอัปโหลดไฟล์ ฯลฯ โดยใช้รูปแบบ HTML
HttpClient API จัดเตรียมคลาสที่มีชื่อว่า HttpPost ซึ่งแสดงถึงคำขอ POST
ทำตามขั้นตอนด้านล่างเพื่อส่งคำขอ HTTP POST โดยใช้ไลบรารี HttpClient
ขั้นตอนที่ 1 - สร้างวัตถุ HttpClient
createDefault() วิธีการของ HttpClients คลาสส่งคืนอ็อบเจ็กต์ของคลาส CloseableHttpClientซึ่งเป็นการใช้งานพื้นฐานของไฟล์ HttpClient อินเตอร์เฟซ.
ใช้วิธีนี้สร้างวัตถุ HttpClient
CloseableHttpClient httpClient = HttpClients.createDefault();
ขั้นตอนที่ 2 - สร้างวัตถุ HttpPost
HttpPost คลาสแสดงถึง HTTP POSTคำขอ. สิ่งนี้จะส่งข้อมูลที่จำเป็นและดึงข้อมูลของเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI
สร้างคำขอนี้โดยสร้างอินสแตนซ์ไฟล์ HttpPost คลาสและส่งผ่านค่าสตริงที่แสดงถึง URI เป็นพารามิเตอร์ไปยังตัวสร้าง
HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");
ขั้นตอนที่ 3 - ดำเนินการรับคำขอ
execute() เมธอดของอ็อบเจ็กต์ CloseableHttpClient ยอมรับอ็อบเจ็กต์ HttpUriRequest (interface) (เช่น HttpGet, HttpPost, HttpPut, HttpHead เป็นต้น) และส่งคืนอ็อบเจ็กต์ตอบกลับ
HttpResponse httpResponse = httpclient.execute(httpget);
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างที่แสดงการดำเนินการของคำขอ HTTP POST โดยใช้ไลบรารี 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());
}
}
}
เอาต์พุต
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้
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>
ขอแนะนำให้ประมวลผลการตอบกลับ HTTP โดยใช้ตัวจัดการการตอบกลับ ในบทนี้เราจะพูดถึงวิธีสร้างตัวจัดการการตอบกลับและวิธีใช้เพื่อประมวลผลการตอบกลับ
หากคุณใช้ตัวจัดการการตอบกลับการเชื่อมต่อ HTTP ทั้งหมดจะถูกปล่อยโดยอัตโนมัติ
การสร้างตัวจัดการการตอบกลับ
HttpClient API มีอินเทอร์เฟซที่เรียกว่า ResponseHandler ในแพ็คเกจ org.apache.http.client. ในการสร้างตัวจัดการการตอบสนองให้ใช้อินเทอร์เฟซนี้และลบล้าง handleResponse() วิธี.
ทุกการตอบกลับมีรหัสสถานะและหากรหัสสถานะอยู่ระหว่าง 200 ถึง 300 นั่นหมายความว่าได้รับการดำเนินการที่เข้าใจและยอมรับแล้ว ดังนั้นในตัวอย่างของเราเราจะจัดการเอนทิตีของการตอบสนองด้วยรหัสสถานะดังกล่าว
ดำเนินการตามคำขอโดยใช้ตัวจัดการการตอบกลับ
ทำตามขั้นตอนที่ระบุด้านล่างเพื่อดำเนินการตามคำขอโดยใช้ตัวจัดการการตอบกลับ
ขั้นตอนที่ 1 - สร้างวัตถุ HttpClient
createDefault() วิธีการของ HttpClients คลาสส่งคืนอ็อบเจ็กต์ของคลาส CloseableHttpClientซึ่งเป็นการใช้งานพื้นฐานของไฟล์ HttpClientอินเตอร์เฟซ. การใช้วิธีนี้สร้างวัตถุ HttpClient
CloseableHttpClient httpclient = HttpClients.createDefault();
ขั้นตอนที่ 2 - สร้างตัวจัดการการตอบกลับทันที
สร้างอินสแตนซ์อ็อบเจ็กต์ตัวจัดการการตอบสนองที่สร้างขึ้นด้านบนโดยใช้โค้ดบรรทัดต่อไปนี้
ResponseHandler<String> responseHandler = new MyResponseHandler();
ขั้นตอนที่ 3 - สร้างวัตถุ HttpGet
HttpGet คลาสแทนคำร้องขอ HTTP GET ซึ่งดึงข้อมูลของเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI
สร้างคำขอ HttpGet โดยสร้างอินสแตนซ์คลาส HttpGet และส่งสตริงที่แสดง URI เป็นพารามิเตอร์ไปยังตัวสร้าง
ResponseHandler<String> responseHandler = new MyResponseHandler();
ขั้นตอนที่ 4 - ดำเนินการรับคำขอโดยใช้ตัวจัดการการตอบกลับ
CloseableHttpClient คลาสมีตัวแปร execute() วิธีการที่ยอมรับสองวัตถุ ResponseHandler และ HttpUriRequest และส่งคืนอ็อบเจ็กต์ตอบกลับ
String httpResponse = httpclient.execute(httpget, responseHandler);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานตัวจัดการการตอบสนอง
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);
}
}
เอาต์พุต
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -
<!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>
หากคุณกำลังประมวลผลการตอบกลับ HTTP ด้วยตนเองแทนที่จะใช้ตัวจัดการการตอบกลับคุณจะต้องปิดการเชื่อมต่อ http ทั้งหมดด้วยตัวเอง บทนี้อธิบายวิธีปิดการเชื่อมต่อด้วยตนเอง
ในขณะที่ปิดการเชื่อมต่อ HTTP ด้วยตนเองให้ทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1 - สร้างวัตถุ HttpClient
createDefault() วิธีการของ HttpClients คลาสส่งคืนอ็อบเจ็กต์ของคลาส CloseableHttpClientซึ่งเป็นการใช้งานอินเทอร์เฟซ HttpClient พื้นฐาน
ใช้วิธีนี้สร้างไฟล์ HttpClient วัตถุดังแสดงด้านล่าง -
CloseableHttpClient httpClient = HttpClients.createDefault();
ขั้นตอนที่ 2 - เริ่มบล็อกการลองในที่สุด
เริ่มบล็อกการลองในที่สุดเขียนโค้ดที่เหลือในโปรแกรมในบล็อกลองและปิดวัตถุ CloseableHttpClient ในบล็อกสุดท้าย
CloseableHttpClient httpClient = HttpClients.createDefault();
try{
//Remaining code . . . . . . . . . . . . . . .
}finally{
httpClient.close();
}
ขั้นตอนที่ 3 - สร้าง HttpGetobject
HttpGet คลาสแทนคำร้องขอ HTTP GET ซึ่งดึงข้อมูลของเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI
สร้างคำร้องขอ HTTP GET โดยสร้างอินสแตนซ์คลาส HttpGet โดยส่งสตริงที่แสดงถึง URI
HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");
ขั้นตอนที่ 4 - ดำเนินการรับคำขอ
execute() วิธีการของ CloseableHttpClient วัตถุยอมรับ a HttpUriRequest (interface) object (เช่น HttpGet, HttpPost, HttpPut, HttpHead เป็นต้น) และส่งคืนอ็อบเจกต์ตอบกลับ
ดำเนินการตามคำขอโดยใช้วิธีการที่กำหนด -
HttpResponse httpResponse = httpclient.execute(httpGet);
ขั้นตอนที่ 5 - เริ่มการลองอีกครั้ง (ซ้อนกัน) ในที่สุด
เริ่มบล็อกการลองอีกครั้งในที่สุด (ซ้อนอยู่ในการลองก่อนหน้านี้) เขียนโค้ดที่เหลือในโปรแกรมในบล็อกลองนี้และปิดวัตถุ HttpResponse ในบล็อกสุดท้าย
CloseableHttpClient httpclient = HttpClients.createDefault();
try{
. . . . . . .
. . . . . . .
CloseableHttpResponse httpresponse = httpclient.execute(httpget);
try{
. . . . . . .
. . . . . . .
}finally{
httpresponse.close();
}
}finally{
httpclient.close();
}
ตัวอย่าง
เมื่อใดก็ตามที่คุณสร้าง / รับวัตถุเช่นคำร้องขอสตรีมการตอบกลับ ฯลฯ ให้เริ่มต้นลองบล็อกในบรรทัดถัดไปเขียนโค้ดที่เหลือภายในการลองและปิดอ็อบเจ็กต์ที่เกี่ยวข้องในบล็อกสุดท้ายตามที่แสดงในโปรแกรมต่อไปนี้ -
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();
}
}
}
เอาต์พุต
ในการรันโปรแกรมข้างต้นผลลัพธ์ต่อไปนี้จะถูกสร้างขึ้น -
<!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>
คุณสามารถยกเลิกคำขอ HTTP ปัจจุบันโดยใช้ไฟล์ abort() วิธีการกล่าวคือหลังจากเรียกใช้เมธอดนี้ในคำขอเฉพาะการดำเนินการของมันจะถูกยกเลิก
หากวิธีนี้ถูกเรียกใช้หลังจากการดำเนินการหนึ่งครั้งการตอบสนองของการดำเนินการนั้นจะไม่ได้รับผลกระทบและการดำเนินการที่ตามมาจะถูกยกเลิก
ตัวอย่าง
หากคุณสังเกตตัวอย่างต่อไปนี้เราได้สร้างคำขอ HttpGet พิมพ์รูปแบบคำขอที่ใช้โดยใช้ไฟล์ getMethod().
จากนั้นเราได้ดำเนินการอีกครั้งโดยใช้คำขอเดียวกัน พิมพ์บรรทัดสถานะโดยใช้การดำเนินการ1 stอีกครั้ง สุดท้ายพิมพ์บรรทัดสถานะของการดำเนินการที่สอง
ตามที่กล่าวไว้คำตอบของการดำเนินการ1 st (การดำเนินการก่อนวิธียกเลิก) จะถูกพิมพ์ออกมา (รวมถึงบรรทัดสถานะที่สองที่เขียนหลังจากวิธีการยกเลิก) และการดำเนินการที่ตามมาทั้งหมดของคำขอปัจจุบันหลังจากวิธีการยกเลิกจะล้มเหลวในการเรียกใช้ ข้อยกเว้น
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());
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
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)
ผู้สกัดกั้นคือผู้ที่ช่วยขัดขวางหรือเปลี่ยนแปลงคำขอหรือการตอบสนอง โดยทั่วไปแล้วตัวสกัดกั้นโปรโตคอลจะดำเนินการกับส่วนหัวเฉพาะหรือกลุ่มของส่วนหัวที่เกี่ยวข้อง ไลบรารี HttpClient ให้การสนับสนุนสำหรับ interceptors
ร้องขอตัวสกัดกั้น
HttpRequestInterceptorอินเทอร์เฟซแสดงถึงตัวสกัดกั้นการร้องขอ อินเทอร์เฟซนี้มีวิธีการที่เรียกว่ากระบวนการที่คุณต้องเขียนโค้ดเพื่อสกัดกั้นคำขอ
ในฝั่งไคลเอ็นต์วิธีนี้จะตรวจสอบ / ประมวลผลคำขอก่อนที่จะส่งไปยังเซิร์ฟเวอร์และในฝั่งเซิร์ฟเวอร์วิธีนี้จะถูกดำเนินการก่อนที่จะประเมินเนื้อหาของคำขอ
การสร้างตัวสกัดกั้นคำขอ
คุณสามารถสร้างตัวสกัดกั้นคำขอได้โดยทำตามขั้นตอนด้านล่างนี้
Step 1 - Create an object of HttpRequestInterceptor
สร้างอ็อบเจ็กต์ของอินเทอร์เฟซ HttpRequestInterceptor โดยใช้กระบวนการวิธีนามธรรม
HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
//Method implementation . . . . .
};
Step 2 - Instantiate CloseableHttpClient object
สร้างแบบกำหนดเอง CloseableHttpClient วัตถุโดยการเพิ่ม interceptor ที่สร้างไว้ด้านบนดังที่แสดงด้านล่าง -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();
เมื่อใช้วัตถุนี้คุณสามารถดำเนินการตามคำขอได้ตามปกติ
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ตัวสกัดกั้นคำขอ ในตัวอย่างนี้เราได้สร้างอ็อบเจ็กต์คำร้องขอ HTTP GET และเพิ่มส่วนหัวสามส่วน ได้แก่ sample-header, demoheader และ test-header เข้าไป
ใน processor()วิธีการของผู้สกัดกั้นเรากำลังตรวจสอบส่วนหัวของคำขอที่ส่งไป ถ้าส่วนหัวเหล่านั้นเป็นsample-headerเรากำลังพยายามลบและแสดงรายการส่วนหัวของคำขอนั้น ๆ
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());
}
}
เอาต์พุต
ในการรันโปรแกรมข้างต้นผลลัพธ์ต่อไปนี้จะถูกสร้างขึ้น -
Contains header sample-header, removing it..
demo-header
test-header
HTTP/1.1 200 OK
ผู้สกัดกั้นการตอบสนอง
HttpResponseInterceptorอินเทอร์เฟซแสดงถึงตัวสกัดกั้นการตอบสนอง อินเทอร์เฟซนี้มีวิธีการที่เรียกว่าprocess(). ในวิธีนี้คุณต้องเขียนโค้ดเพื่อสกัดกั้นการตอบสนอง
ในฝั่งเซิร์ฟเวอร์วิธีนี้จะตรวจสอบ / ประมวลผลการตอบกลับก่อนที่จะส่งไปยังไคลเอนต์และในฝั่งไคลเอ็นต์วิธีนี้จะดำเนินการก่อนที่จะประเมินเนื้อหาของการตอบสนอง
การสร้างตัวสกัดกั้นการตอบสนอง
คุณสามารถสร้างตัวสกัดกั้นการตอบสนองได้โดยทำตามขั้นตอนด้านล่างนี้ -
Step 1 - Create an object of HttpResponseInterceptor
สร้างวัตถุของไฟล์ HttpResponseInterceptor อินเทอร์เฟซโดยใช้วิธีนามธรรม process.
HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
@Override
public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
//Method implementation . . . . . . . .
}
};
ขั้นตอนที่ 2: สร้างอินสแตนซ์วัตถุ CloseableHttpClient
สร้างแบบกำหนดเอง CloseableHttpClient โดยเพิ่มตัวสกัดกั้นที่สร้างไว้ด้านบนดังที่แสดงด้านล่าง -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(responseInterceptor).build();
เมื่อใช้วัตถุนี้คุณสามารถดำเนินการตามคำขอได้ตามปกติ
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ตัวสกัดกั้นการตอบสนอง ในตัวอย่างนี้เราได้เพิ่มส่วนหัวสามส่วน: ส่วนหัวตัวอย่าง, ส่วนหัวการสาธิตและส่วนหัวทดสอบในการตอบสนองในโปรเซสเซอร์
หลังจากดำเนินการตามคำขอและได้รับการตอบกลับเราพิมพ์ชื่อของส่วนหัวทั้งหมดของการตอบกลับโดยใช้ getAllHeaders() วิธี.
และในผลลัพธ์คุณสามารถสังเกตชื่อของสามส่วนหัวในรายการ
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());
}
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
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
เมื่อใช้ HttpClient คุณสามารถเชื่อมต่อกับเว็บไซต์ที่ต้องการชื่อผู้ใช้และรหัสผ่าน บทนี้จะอธิบายวิธีดำเนินการตามคำขอของลูกค้ากับไซต์ที่ขอชื่อผู้ใช้และรหัสผ่าน
ขั้นตอนที่ 1 - สร้างวัตถุ CredentialsProvider
CredentialsProviderอินเทอร์เฟซเก็บรักษาคอลเลกชันเพื่อเก็บข้อมูลรับรองการเข้าสู่ระบบของผู้ใช้ คุณสามารถสร้างวัตถุได้โดยการสร้างอินสแตนซ์ไฟล์BasicCredentialsProvider คลาสการใช้งานเริ่มต้นของอินเทอร์เฟซนี้
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
ขั้นตอนที่ 2 - ตั้งค่าข้อมูลรับรอง
คุณสามารถตั้งค่าหนังสือรับรองที่จำเป็นให้กับอ็อบเจ็กต์ CredentialsProvider โดยใช้ไฟล์ setCredentials() วิธี.
วิธีนี้รับสองวัตถุตามที่ระบุด้านล่าง -
AuthScope object - ขอบเขตการพิสูจน์ตัวตนที่ระบุรายละเอียดเช่นชื่อโฮสต์หมายเลขพอร์ตและชื่อโครงร่างการตรวจสอบสิทธิ์
Credentials object - การระบุข้อมูลประจำตัว (ชื่อผู้ใช้รหัสผ่าน)
ตั้งค่าข้อมูลรับรองโดยใช้ setCredentials() วิธีการสำหรับโฮสต์และพร็อกซีดังที่แสดงด้านล่าง -
credsProvider.setCredentials(new AuthScope("example.com", 80),
new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000),
new UsernamePasswordCredentials("abc", "passwd"));
ขั้นตอนที่ 3 - สร้างวัตถุ HttpClientBuilder
สร้างไฟล์ HttpClientBuilder ใช้ custom() วิธีการของ HttpClients ชั้นเรียน
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
ขั้นตอนที่ 4 - ตั้งค่า credentialsPovider
คุณสามารถตั้งค่าวัตถุ credentialsPovider ที่สร้างไว้ด้านบนเป็น HttpClientBuilder โดยใช้ไฟล์ setDefaultCredentialsProvider() วิธี.
ตั้งค่าอ็อบเจ็กต์ CredentialProvider ที่สร้างในขั้นตอนก่อนหน้าไปยังตัวสร้างไคลเอ็นต์โดยส่งผ่านไปยังไฟล์ CredentialsProvider object() วิธีการดังแสดงด้านล่าง
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
ขั้นตอนที่ 5 - สร้าง CloseableHttpClient
สร้างไฟล์ CloseableHttpClient วัตถุโดยใช้ build() วิธีการของ HttpClientBuilder ชั้นเรียน
CloseableHttpClient httpclient = clientbuilder.build()
ขั้นตอนที่ 6 - สร้างวัตถุ HttpGet และดำเนินการ
สร้างวัตถุ HttpRequest โดยการสร้างอินสแตนซ์คลาส HttpGet ดำเนินการตามคำขอนี้โดยใช้ไฟล์execute() วิธี.
//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
ตัวอย่าง
ต่อไปนี้เป็นโปรแกรมตัวอย่างที่แสดงให้เห็นถึงการดำเนินการตามคำขอ HTTP กับไซต์เป้าหมายที่ต้องการการตรวจสอบผู้ใช้
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());
}
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้
GET
HTTP/1.1 200 OK
200
พร็อกซีเซิร์ฟเวอร์เป็นเซิร์ฟเวอร์ตัวกลางระหว่างไคลเอนต์และอินเทอร์เน็ต พร็อกซีเซิร์ฟเวอร์มีฟังก์ชันพื้นฐานดังต่อไปนี้ -
การกรองข้อมูลไฟร์วอลล์และเครือข่าย
การแบ่งปันการเชื่อมต่อเครือข่าย
แคชข้อมูล
การใช้ไลบรารี HttpClient คุณสามารถส่งคำขอ HTTP โดยใช้พร็อกซี ทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1 - สร้างวัตถุ HttpHost
เริ่มต้นไฟล์ HttpHost คลาสของ org.apache.http แพ็กเกจโดยส่งพารามิเตอร์สตริงที่แสดงชื่อของโฮสต์พร็อกซี (ซึ่งคุณต้องการให้ส่งคำขอ) ไปยังตัวสร้าง
//Creating an HttpHost object for proxy
HttpHost proxyHost = new HttpHost("localhost");
ในทำนองเดียวกันให้สร้างอ็อบเจ็กต์ HttpHost อื่นเพื่อแสดงโฮสต์เป้าหมายที่ต้องการส่งคำขอ
//Creating an HttpHost object for target
HttpHost targetHost = new HttpHost("google.com");
ขั้นตอนที่ 2 - สร้างวัตถุ HttpRoutePlanner
HttpRoutePlannerอินเทอร์เฟซคำนวณเส้นทางไปยังโฮสต์ที่ระบุ สร้างออบเจ็กต์ของอินเทอร์เฟซนี้โดยการสร้างอินสแตนซ์DefaultProxyRoutePlannerคลาสการใช้งานอินเทอร์เฟซนี้ ในฐานะพารามิเตอร์ของตัวสร้างให้ส่งผ่านโฮสต์พร็อกซีที่สร้างไว้ด้านบน -
//creating a RoutePlanner object
HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);
ขั้นตอนที่ 3 - ตั้งค่าตัววางแผนเส้นทางเป็นตัวสร้างลูกค้า
ใช้ custom() วิธีการของ HttpClients ชั้นเรียนสร้างไฟล์ HttpClientBuilder วัตถุและสำหรับวัตถุนี้ตั้งค่าตัววางแผนเส้นทางที่สร้างไว้ด้านบนโดยใช้ setRoutePlanner() วิธี.
//Setting the route planner to the HttpClientBuilder object
HttpClientBuilder clientBuilder = HttpClients.custom();
clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
ขั้นตอนที่ 4 - สร้างวัตถุ CloseableHttpClient
สร้างไฟล์ CloseableHttpClient โดยเรียกไฟล์ build() วิธี.
//Building a CloseableHttpClient
CloseableHttpClient httpClient = clientBuilder.build();
ขั้นตอนที่ 5 - สร้าง HttpGetobject
สร้างคำขอ HTTP GET โดยสร้างอินสแตนซ์ไฟล์ HttpGet ชั้นเรียน
//Creating an HttpGet object
HttpGet httpGet = new HttpGet("/");
ขั้นตอนที่ 6 - ดำเนินการตามคำขอ
หนึ่งในรูปแบบของ execute() วิธีการยอมรับไฟล์ HttpHost และ HttpRequestวัตถุและดำเนินการตามคำขอ ดำเนินการตามคำขอโดยใช้วิธีนี้ -
//Executing the Get request
HttpResponse httpResponse = httpclient.execute(targetHost, httpGet);
ตัวอย่าง
ตัวอย่างต่อไปนี้สาธิตวิธีส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ผ่านพร็อกซี ในตัวอย่างนี้เรากำลังส่งคำขอ HTTP GET ไปยัง google.com ผ่าน localhost เราได้พิมพ์ส่วนหัวของคำตอบและเนื้อหาของการตอบกลับ
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));
}
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
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>
ในบทนี้เราจะเรียนรู้วิธีการสร้าง HttpRequest ที่พิสูจน์ตัวตนโดยใช้ชื่อผู้ใช้และรหัสผ่านและสร้างช่องสัญญาณผ่านพร็อกซีไปยังโฮสต์เป้าหมายโดยใช้ตัวอย่าง
ขั้นตอนที่ 1 - สร้างวัตถุ CredentialsProvider
CredentialsProvider Interface เก็บรักษาคอลเลกชันเพื่อเก็บข้อมูลรับรองการล็อกอินของผู้ใช้ คุณสามารถสร้างอ็อบเจ็กต์ได้โดยสร้างอินสแตนซ์คลาส BasicCredentialsProvider ซึ่งเป็นการใช้งานอินเทอร์เฟซนี้โดยปริยาย
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
ขั้นตอนที่ 2 - ตั้งค่าข้อมูลรับรอง
คุณสามารถตั้งค่าหนังสือรับรองที่จำเป็นให้กับอ็อบเจ็กต์ CredentialsProvider โดยใช้ไฟล์ setCredentials()วิธี. วิธีนี้ยอมรับสองวัตถุ -
AuthScope object - ขอบเขตการพิสูจน์ตัวตนที่ระบุรายละเอียดเช่นชื่อโฮสต์หมายเลขพอร์ตและชื่อโครงร่างการตรวจสอบสิทธิ์
Credentials object- การระบุข้อมูลประจำตัว (ชื่อผู้ใช้รหัสผ่าน) ตั้งค่าข้อมูลรับรองโดยใช้setCredentials() วิธีการสำหรับทั้งโฮสต์และพร็อกซีดังที่แสดงด้านล่าง
credsProvider.setCredentials(new AuthScope("example.com", 80), new
UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), new
UsernamePasswordCredentials("abc", "passwd"));
ขั้นตอนที่ 3 - สร้างวัตถุ HttpClientBuilder
สร้างไฟล์ HttpClientBuilder ใช้ custom() วิธีการของ HttpClients class ดังรูปด้านล่าง -
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
ขั้นตอนที่ 4 - ตั้งค่า CredentialsProvider
คุณสามารถตั้งค่าวัตถุ CredentialsProvider เป็นวัตถุ HttpClientBuilder โดยใช้ไฟล์ setDefaultCredentialsProvider()วิธี. ส่งผ่านไฟล์CredentialsProvider คัดค้านวิธีนี้
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
ขั้นตอนที่ 5 - สร้าง CloseableHttpClient
สร้างไฟล์ CloseableHttpClient วัตถุโดยใช้ build() วิธี.
CloseableHttpClient httpclient = clientbuilder.build();
ขั้นตอนที่ 6 - สร้างพร็อกซีและโฮสต์เป้าหมาย
สร้างโฮสต์เป้าหมายและพร็อกซีโดยสร้างอินสแตนซ์ไฟล์ HttpHost ชั้นเรียน
//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");
ขั้นตอนที่ 7 - ตั้งค่าพร็อกซีและสร้างวัตถุ RequestConfig
สร้างไฟล์ RequestConfig.Builder วัตถุโดยใช้ custom()วิธี. ตั้งค่าวัตถุ proxyHost ที่สร้างไว้ก่อนหน้านี้เป็นRequestConfig.Builder ใช้ setProxy()วิธี. สุดท้ายสร้างไฟล์RequestConfig วัตถุโดยใช้ build() วิธี.
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
ขั้นตอนที่ 8 - สร้างวัตถุคำขอ HttpGet และตั้งค่าวัตถุกำหนดค่าเป็น
สร้างไฟล์ HttpGetวัตถุโดยการสร้างอินสแตนซ์คลาส HttpGet ตั้งค่าวัตถุกำหนดค่าที่สร้างในขั้นตอนก่อนหน้าเป็นวัตถุนี้โดยใช้setConfig() วิธี.
//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
ขั้นตอนที่ 9 - ดำเนินการตามคำขอ
ดำเนินการตามคำขอโดยส่งผ่านวัตถุ HttpHost (เป้าหมาย) และคำขอ (HttpGet) เป็นพารามิเตอร์ไปยัง execute() วิธี.
HttpResponse httpResponse = httpclient.execute(targetHost, httpget);
ตัวอย่าง
ตัวอย่างต่อไปนี้สาธิตวิธีดำเนินการคำขอ HTTP ผ่านพร็อกซีโดยใช้ชื่อผู้ใช้และรหัสผ่าน
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());
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
HTTP/1.1 200 OK
การใช้ไลบรารี HttpClient คุณสามารถส่งคำขอหรือล็อกอินเข้าสู่ฟอร์มโดยส่งผ่านพารามิเตอร์
ทำตามขั้นตอนด้านล่างเพื่อเข้าสู่ระบบแบบฟอร์ม
ขั้นตอนที่ 1 - สร้างวัตถุ HttpClient
createDefault() วิธีการของ HttpClients คลาสส่งคืนอ็อบเจ็กต์ของคลาส CloseableHttpClientซึ่งเป็นการใช้งานอินเทอร์เฟซ HttpClient พื้นฐาน ใช้วิธีนี้สร้างวัตถุ HttpClient -
CloseableHttpClient httpClient = HttpClients.createDefault();
ขั้นตอนที่ 2 - สร้างวัตถุ RequestBuilder
ห้องเรียน RequestBuilderใช้ในการสร้างคำขอโดยการเพิ่มพารามิเตอร์เข้าไป หากประเภทคำขอคือ PUT หรือ POST จะเพิ่มพารามิเตอร์ให้กับคำขอเป็นเอนทิตีเข้ารหัส URL
สร้างวัตถุ RequestBuilder (ประเภท POST) โดยใช้เมธอด post ()
//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post();
ขั้นตอนที่ 3 - ตั้งค่า Uri และพารามิเตอร์เป็น RequestBuilder
ตั้งค่า URI และพารามิเตอร์เป็นวัตถุ RequestBuilder โดยใช้ setUri() และ addParameter() วิธีการของคลาส RequestBuilder
//Set URI and parameters
RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post");
reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");
ขั้นตอนที่ 4 - สร้างวัตถุ HttpUriRequest
หลังจากตั้งค่าพารามิเตอร์ที่ต้องการแล้วให้สร้างไฟล์ HttpUriRequest วัตถุโดยใช้ build() วิธี.
//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();
ขั้นตอนที่ 5 - ดำเนินการตามคำขอ
วิธีดำเนินการของอ็อบเจ็กต์ CloseableHttpClient ยอมรับอ็อบเจ็กต์ HttpUriRequest (อินเตอร์เฟส) (เช่น HttpGet, HttpPost, HttpPut, HttpHead เป็นต้น) และส่งคืนอ็อบเจ็กต์การตอบสนอง
ดำเนินการ HttpUriRequest ที่สร้างขึ้นในขั้นตอนก่อนหน้านี้โดยส่งต่อไปยังไฟล์ execute() วิธี.
//Execute the request
HttpResponse httpresponse = httpclient.execute(httppost);
ตัวอย่าง
ตัวอย่างต่อไปนี้สาธิตวิธีล็อกออนเข้าสู่ฟอร์มโดยส่งข้อมูลรับรองการเข้าสู่ระบบ ที่นี่เราได้ส่งพารามิเตอร์สองตัว -username and password ลงในแบบฟอร์มและพยายามพิมพ์เอนทิตีข้อความและสถานะของคำขอ
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());
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
{
"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
เข้าสู่ระบบด้วยคุกกี้
หากแบบฟอร์มของคุณเก็บคุกกี้แทนที่จะสร้างค่าเริ่มต้น CloseableHttpClient วัตถุ.
Create a CookieStore object โดยการสร้างอินสแตนซ์คลาส BasicCookieStore
//Creating a BasicCookieStore object
BasicCookieStore cookieStore = new BasicCookieStore();
Create a HttpClientBuilder ใช้ custom() วิธีการของ HttpClients ชั้นเรียน
//Creating an HttpClientBuilder object
HttpClientBuilder clientbuilder = HttpClients.custom();
Set the cookie store to the client builder โดยใช้เมธอด setDefaultCookieStore ()
//Setting default cookie store to the client builder object
Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);
สร้างไฟล์ CloseableHttpClient วัตถุโดยใช้ build() วิธี.
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder1.build();
สร้างไฟล์ HttpUriRequest วัตถุตามที่ระบุไว้ข้างต้นโดยผ่านการดำเนินการตามคำขอ
หากเพจจัดเก็บคุกกี้พารามิเตอร์ที่คุณส่งผ่านจะถูกเพิ่มไปยังที่เก็บคุกกี้
คุณสามารถพิมพ์เนื้อหาของไฟล์ CookieStore ออบเจ็กต์ที่คุณสามารถดูพารามิเตอร์ของคุณ (พร้อมกับพารามิเตอร์ก่อนหน้านี้ที่เพจเก็บไว้ในเคส)
ในการพิมพ์คุกกี้ให้รับคุกกี้ทั้งหมดจากไฟล์ CookieStore วัตถุโดยใช้ getCookies()วิธี. วิธีนี้ส่งกลับไฟล์Listวัตถุ. ใช้ Iterator พิมพ์เนื้อหารายการตามที่แสดงด้านล่าง -
//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());
}
คุกกี้คือไฟล์ข้อความที่เก็บไว้ในคอมพิวเตอร์ไคลเอนต์และจะถูกเก็บไว้เพื่อวัตถุประสงค์ในการติดตามข้อมูลต่างๆ
HttpClient ให้การสนับสนุนคุกกี้ที่คุณสามารถสร้างและจัดการคุกกี้ได้
การสร้างคุกกี้
ทำตามขั้นตอนด้านล่างเพื่อสร้างคุกกี้โดยใช้ไลบรารี HttpClient
ขั้นตอนที่ 1 - สร้างวัตถุ Cookiestore
CookieStoreอินเทอร์เฟซแสดงถึงที่เก็บนามธรรมสำหรับวัตถุคุกกี้ คุณสามารถสร้างที่เก็บคุกกี้ได้โดยการสร้างไฟล์BasicCookieStore คลาสซึ่งเป็นค่าเริ่มต้นของอินเทอร์เฟซนี้
//Creating the CookieStore object
CookieStore cookieStore = new BasicCookieStore();
ขั้นตอนที่ 2 - สร้างวัตถุ ClientCookie
นอกจากฟังก์ชันของคุกกี้แล้ว ClientCookie ยังสามารถรับคุกกี้ดั้งเดิมในเซิร์ฟเวอร์ได้อีกด้วย คุณสามารถสร้างคุกกี้ไคลเอ็นต์ได้โดยสร้างอินสแตนซ์ไฟล์BasicClientCookieชั้นเรียน ในการสร้างคลาสนี้คุณต้องส่งผ่านคู่คีย์ - ค่าที่คุณต้องการเก็บไว้ในคุกกี้นั้น ๆ
//Creating client cookie
BasicClientCookie clientCookie = new BasicClientCookie("name","Raju");
ขั้นตอนที่ 3 - ตั้งค่าให้กับคุกกี้
สำหรับคุกกี้ไคลเอ็นต์คุณสามารถกำหนด / ลบเส้นทางค่าเวอร์ชันวันหมดอายุโดเมนข้อคิดเห็นและแอตทริบิวต์โดยใช้วิธีการที่เกี่ยวข้อง
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);
ขั้นตอนที่ 4 - เพิ่มคุกกี้ในที่เก็บคุกกี้
คุณสามารถเพิ่มคุกกี้ในที่เก็บคุกกี้โดยใช้ไฟล์ addCookie() วิธีการของ BasicCookieStore ชั้นเรียน
เพิ่มคุกกี้ที่จำเป็นในไฟล์ Cookiestore.
//Adding the created cookies to cookie store
cookiestore.addCookie(clientcookie);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการสร้างคุกกี้และเพิ่มลงในที่เก็บคุกกี้ ที่นี่เราสร้างที่เก็บคุกกี้ซึ่งเป็นคุกกี้จำนวนหนึ่งโดยตั้งค่าโดเมนและพา ธ และเพิ่มสิ่งเหล่านี้ลงในที่เก็บคุกกี้
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);
}
}
กำลังดึงคุกกี้
คุณสามารถเพิ่มคุกกี้ลงในร้านคุกกี้ได้โดยใช้ getCookies() วิธีการของ asicCookieStoreชั้นเรียน วิธีนี้จะส่งคืนรายการที่เก็บคุกกี้ทั้งหมดไว้ในที่เก็บคุกกี้
คุณสามารถพิมพ์เนื้อหาของที่เก็บคุกกี้โดยใช้ Iterator ดังที่แสดงด้านล่าง -
//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());
}
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการดึงคุกกี้จากที่เก็บคุกกี้ ที่นี่เรากำลังเพิ่มคุกกี้จำนวนหนึ่งไปยังที่เก็บคุกกี้และเรียกคืนคุกกี้
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);
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมนี้จะสร้างผลลัพธ์ต่อไปนี้ -
[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]
โปรแกรมแบบมัลติเธรดประกอบด้วยสองส่วนขึ้นไปที่สามารถทำงานพร้อมกันได้และแต่ละส่วนสามารถจัดการงานที่แตกต่างกันได้ในเวลาเดียวกันโดยใช้ทรัพยากรที่มีอยู่ให้เกิดประโยชน์สูงสุด
คุณสามารถดำเนินการร้องขอจากหลายเธรดโดยการเขียนโปรแกรม HttpClient แบบมัลติเธรด
หากคุณต้องการดำเนินการตามคำขอไคลเอ็นต์หลายรายการจากเธรดติดต่อกันคุณต้องสร้างไฟล์ ClientConnectionPoolManager. มันมีสระว่ายน้ำของHttpClientConnections และให้บริการคำขอหลายรายการจากเธรด
ตัวจัดการการเชื่อมต่อจะรวบรวมการเชื่อมต่อตามเส้นทาง หากผู้จัดการมีการเชื่อมต่อสำหรับเส้นทางใดเส้นทางหนึ่งระบบจะให้บริการคำขอใหม่ในเส้นทางเหล่านั้นโดยการเช่าการเชื่อมต่อที่มีอยู่จากพูลแทนที่จะสร้างเส้นทางใหม่
ทำตามขั้นตอนเพื่อดำเนินการร้องขอจากหลายเธรด -
ขั้นตอนที่ 1 - การสร้าง Client Connection Pool Manager
สร้าง Client Connection Pool Manager โดยสร้างอินสแตนซ์ PoolingHttpClientConnectionManager ชั้นเรียน
PoolingHttpClientConnectionManager connManager = new
PoolingHttpClientConnectionManager();
ขั้นตอนที่ 2 - กำหนดจำนวนการเชื่อมต่อสูงสุด
ตั้งค่าจำนวนการเชื่อมต่อสูงสุดในพูลโดยใช้ setMaxTotal() วิธี.
//Set the maximum number of connections in the pool
connManager.setMaxTotal(100);
ขั้นตอนที่ 3 - สร้างวัตถุ ClientBuilder
สร้างไฟล์ ClientBuilder วัตถุโดยการตั้งค่าตัวจัดการการเชื่อมต่อโดยใช้ setConnectionManager() วิธีการดังแสดงด้านล่าง -
HttpClientBuilder clientbuilder =
HttpClients.custom().setConnectionManager(connManager);
ขั้นตอนที่ 4 - สร้างวัตถุคำขอ HttpGet
สร้างอินสแตนซ์คลาส HttpGet โดยส่ง URI ที่ต้องการไปยังตัวสร้างเป็นพารามิเตอร์
HttpGet httpget1 = new HttpGet("URI1");
HttpGet httpget2 = new HttpGet("URI2");
. . . . . . . . . . . .
ขั้นตอนที่ 5 - การใช้งานวิธีการเรียกใช้
ตรวจสอบให้แน่ใจว่าคุณได้สร้างคลาสทำให้เป็นเธรด (ไม่ว่าจะโดยการขยายคลาสเธรดหรือโดยการใช้อินเทอร์เฟซ Runnable) และใช้วิธีการรัน
public class ClientMultiThreaded extends Thread {
public void run() {
//Run method implementation . . . . . . . . . .
}
}
ขั้นตอนที่ 6 - สร้างวัตถุเธรด
สร้างอ็อบเจ็กต์เธรดโดยสร้างอินสแตนซ์คลาสเธรด (ClientMultiThreaded) ที่สร้างด้านบน
ส่งผ่านอ็อบเจ็กต์ HttpClient อ็อบเจกต์ HttpGet ตามลำดับและจำนวนเต็มแทน ID ไปยังเธรดเหล่านี้
ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1);
ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2);
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ขั้นตอนที่ 7 - เริ่มและเข้าร่วมเธรด
เริ่มหัวข้อทั้งหมดโดยใช้ start() วิธีการและเข้าร่วมโดยใช้การเข้าร่วม method().
thread1.start();
thread2.start();
. . . . . . . .
thread1.join();
thread2.join();
. . . . . . . . . . . .
ขั้นตอนที่ 8 - เรียกใช้วิธีการ
ภายในวิธีการรันให้ดำเนินการตามคำขอเรียกข้อมูลการตอบกลับและพิมพ์ผลลัพธ์
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการดำเนินการของคำร้องขอ HTTP พร้อมกันจากหลายเธรด ในตัวอย่างนี้เราพยายามดำเนินการตามคำขอต่างๆจากเธรดต่างๆและพยายามพิมพ์สถานะและจำนวนไบต์ที่อ่านโดยไคลเอนต์แต่ละราย
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();
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
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
เมื่อใช้ Secure Socket Layer คุณสามารถสร้างการเชื่อมต่อที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ ช่วยปกป้องข้อมูลที่ละเอียดอ่อนเช่นหมายเลขบัตรเครดิตชื่อผู้ใช้รหัสผ่านพิน ฯลฯ
คุณสามารถทำให้การเชื่อมต่อปลอดภัยยิ่งขึ้นโดยการสร้างบริบท SSL ของคุณเองโดยใช้ไฟล์ HttpClient ห้องสมุด.
ทำตามขั้นตอนด้านล่างเพื่อปรับแต่ง SSLContext โดยใช้ไลบรารี HttpClient -
ขั้นตอนที่ 1 - สร้างวัตถุ SSLContextBuilder
SSLContextBuilderเป็นตัวสร้างสำหรับวัตถุ SSLContext สร้างวัตถุโดยใช้custom() วิธีการของ SSLContexts ชั้นเรียน
//Creating SSLContextBuilder object
SSLContextBuilder SSLBuilder = SSLContexts.custom();
ขั้นตอนที่ 2 - โหลด Keystore
ในเส้นทาง Java_home_directory/jre/lib/security/คุณจะพบไฟล์ชื่อ cacerts บันทึกเป็นไฟล์เก็บคีย์ของคุณ (พร้อมนามสกุล. jks) โหลดไฟล์ที่เก็บคีย์และรหัสผ่าน (ซึ่งก็คือchangeit ตามค่าเริ่มต้น) โดยใช้ไฟล์ loadTrustMaterial() วิธีการของ SSLContextBuilder ชั้นเรียน
//Loading the Keystore file
File file = new File("mykeystore.jks");
SSLBuilder = SSLBuilder.loadTrustMaterial(file, "changeit".toCharArray());
ขั้นตอนที่ 3 - สร้างวัตถุ SSLContext
วัตถุ SSLContext แสดงถึงการใช้งานโปรโตคอลซ็อกเก็ตที่ปลอดภัย สร้าง SSLContext โดยใช้build() วิธี.
//Building the SSLContext
SSLContext sslContext = SSLBuilder.build();
ขั้นตอนที่ 4 - การสร้างวัตถุ SSLConnectionSocketFactory
SSLConnectionSocketFactoryเป็นโรงงานซ็อกเก็ตชั้นสำหรับการเชื่อมต่อ TSL และ SSL เมื่อใช้สิ่งนี้คุณสามารถตรวจสอบเซิร์ฟเวอร์ Https โดยใช้รายการใบรับรองที่เชื่อถือได้และตรวจสอบสิทธิ์เซิร์ฟเวอร์ Https ที่กำหนด
คุณสามารถสร้างสิ่งนี้ได้หลายวิธี ขึ้นอยู่กับวิธีที่คุณสร้างไฟล์SSLConnectionSocketFactory คุณสามารถอนุญาตโฮสต์ทั้งหมดอนุญาตเฉพาะใบรับรองที่ลงนามด้วยตนเองอนุญาตเฉพาะโปรโตคอลบางอย่างเป็นต้น
To allow only particular protocolsสร้าง SSLConnectionSocketFactory โดยการส่งผ่านวัตถุ SSLContext ต้องรองรับสตริงอาร์เรย์ที่แสดงโปรโตคอลต้องรองรับอาร์เรย์สตริงที่แสดงชุดการเข้ารหัสและอ็อบเจ็กต์ HostnameVerifier ไปยังคอนสตรัคเตอร์
new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
To allow all hosts, สร้าง SSLConnectionSocketFactory วัตถุโดยส่งผ่านวัตถุ SSLContext และ NoopHostnameVerifier วัตถุ.
//Creating SSLConnectionSocketFactory SSLConnectionSocketFactory object
SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
ขั้นตอนที่ 5 - สร้างวัตถุ HttpClientBuilder
สร้างวัตถุ HttpClientBuilder โดยใช้ custom() วิธีการของ HttpClients ชั้นเรียน
//Creating HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
ขั้นตอนที่ 6 - ตั้งค่าวัตถุ SSLConnectionSocketFactory
ตั้งค่าวัตถุ SSLConnectionSocketFactory เป็นไฟล์ HttpClientBuilder ใช้ setSSLSocketFactory() วิธี.
//Setting the SSLConnectionSocketFactory
clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);
ขั้นตอนที่ 7 - สร้างวัตถุ CloseableHttpClient
สร้างไฟล์ CloseableHttpClient โดยเรียกไฟล์ build() วิธี.
//Building the CloseableHttpClient
CloseableHttpClient httpclient = clientbuilder.build();
ขั้นตอนที่ 8 - สร้างวัตถุ HttpGet
HttpGet คลาสแทนคำร้องขอ HTTP GET ซึ่งดึงข้อมูลของเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI
สร้างคำร้องขอ HTTP GET โดยสร้างอินสแตนซ์คลาส HttpGet โดยส่งสตริงที่แสดงถึง URI
//Creating the HttpGet request
HttpGet httpget = new HttpGet("https://example.com/");
ขั้นตอนที่ 9 - ดำเนินการตามคำขอ
ดำเนินการตามคำขอโดยใช้ไฟล์ execute() วิธี.
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการปรับแต่ง 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);
}
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้
HTTP/1.1 200 OK
1270
การใช้ HttpClient เราสามารถทำการอัปโหลดหลายส่วนได้กล่าวคือเราสามารถอัปโหลดวัตถุขนาดใหญ่ในส่วนที่เล็กกว่าได้ ในบทนี้เราจะสาธิตการอัปโหลดหลายส่วนในไคลเอนต์ HTTP โดยการอัปโหลดไฟล์ข้อความธรรมดา
โดยทั่วไปการอัปโหลดหลายส่วนจะมีสามส่วน
การเริ่มต้นการอัปโหลด
การอัปโหลดชิ้นส่วนวัตถุ
เสร็จสิ้นการอัปโหลดหลายส่วน
สำหรับการอัปโหลดหลายส่วนโดยใช้ HttpClient เราจำเป็นต้องทำตามขั้นตอนด้านล่างนี้ -
สร้างตัวสร้างหลายส่วน
เพิ่มชิ้นส่วนที่ต้องการลงไป
สร้างบิลด์ให้เสร็จสมบูรณ์และรับ HttpEntity แบบหลายส่วน
สร้างคำขอโดยการตั้งค่าเอนทิตีส่วนย่อยข้างต้น
ดำเนินการตามคำขอ
ต่อไปนี้เป็นขั้นตอนในการอัปโหลดเอนทิตีแบบหลายส่วนโดยใช้ไลบรารี HttpClient
ขั้นตอนที่ 1 - สร้างวัตถุ HttpClient
createDefault() วิธีการของ HttpClients คลาสส่งคืนอ็อบเจ็กต์ของคลาส CloseableHttpClientซึ่งเป็นการใช้งานอินเทอร์เฟซ HttpClient พื้นฐาน ใช้วิธีนี้สร้างวัตถุ HttpClient -
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
ขั้นตอนที่ 2 - สร้างวัตถุ FileBody
FileBodyคลาสแสดงถึงส่วนของร่างกายไบนารีที่สนับสนุนโดยไฟล์ สร้างอินสแตนซ์คลาสนี้โดยส่งไฟล์File วัตถุและ ContentType วัตถุที่แสดงถึงประเภทของเนื้อหา
//Creating a File object
File file = new File("sample.txt");
//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
ขั้นตอนที่ 3 - สร้าง MultipartEntityBuilder
MultipartEntityBuilder คลาสใช้ในการสร้างหลายส่วน HttpEntityวัตถุ. สร้างวัตถุโดยใช้create() วิธีการ (ของคลาสเดียวกัน)
//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
ขั้นตอนที่ 4 - ตั้งค่าโหมด
ก MultipartEntityBuilderมีสามโหมด: STRICT, RFC6532 และ BROWSER_COMPATIBLE ตั้งค่าเป็นโหมดที่ต้องการโดยใช้setMode() วิธี.
//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
ขั้นตอนที่ 5 - เพิ่มส่วนต่างๆที่ต้องการ
โดยใช้วิธีการ addTextBody(), addPart () และ, addBinaryBody()คุณสามารถเพิ่มข้อความไฟล์สตรีมและวัตถุอื่น ๆ ลงในไฟล์ MultipartBuilder. เพิ่มเนื้อหาที่ต้องการโดยใช้วิธีการเหล่านี้
//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));
ขั้นตอนที่ 6 - การสร้างเอนทิตีเดียว
คุณสามารถสร้างส่วนเหล่านี้ทั้งหมดเป็นเอนทิตีเดียวโดยใช้ไฟล์ build() วิธีการของ MultipartEntityBuilderชั้นเรียน ใช้วิธีนี้สร้างชิ้นส่วนทั้งหมดให้เป็นชิ้นเดียวHttpEntity.
//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entityBuilder.build();
ขั้นตอนที่ 7 - สร้างวัตถุ RequestBuilder
ห้องเรียน RequestBuilderใช้ในการสร้างคำขอโดยการเพิ่มพารามิเตอร์เข้าไป หากคำขอเป็นประเภท PUT หรือ POST จะเพิ่มพารามิเตอร์ให้กับคำขอเป็นเอนทิตีเข้ารหัส URL
สร้างวัตถุ RequestBuilder (ประเภท POST) โดยใช้ไฟล์ post()วิธี. และส่ง Uri ที่คุณต้องการส่งคำขอเป็นพารามิเตอร์
//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
ขั้นตอนที่ 8 - ตั้งค่าวัตถุเอนทิตีเป็น RequestBuilder
ตั้งค่าเอนทิตีหลายส่วนที่สร้างไว้ข้างต้นเป็น RequestBuilder โดยใช้ setEntity() วิธีการของ RequestBuilder ชั้นเรียน
//Setting the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);
ขั้นตอนที่ 9 - สร้าง HttpUriRequest
สร้างไฟล์ HttpUriRequest ร้องขอวัตถุโดยใช้ build() วิธีการของ RequestBuilder ชั้นเรียน
//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();
ขั้นตอนที่ 10 - ดำเนินการตามคำขอ
ใช้ execute() วิธีดำเนินการตามคำขอที่สร้างขึ้นในขั้นตอนก่อนหน้านี้ (ข้ามการร้องขอเป็นพารามิเตอร์ไปยังเมธอดนี้)
//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการส่งคำขอหลายส่วนโดยใช้ไลบรารี HttpClient ในตัวอย่างนี้เรากำลังพยายามส่งคำขอหลายส่วนที่สนับสนุนโดยไฟล์
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());
}
}
เอาต์พุต
ในการดำเนินการโปรแกรมด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
{
"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