การดึงหน้าเว็บผ่าน HTTP proxy ใน jsoup
ใช้ API HTTP proxy ระดับคำขอของ jsoup และสร้างคำขอแยกกันเมื่อผู้ปฏิบัติงานหลายคนใช้การตั้งค่าเซสชันร่วมกัน
jsoup สามารถดึงหน้าเว็บผ่าน HTTP proxy และแยกวิเคราะห์การตอบสนองในการเรียกครั้งเดียว:
Document page = Jsoup.connect("https://www.example.com/")
.proxy("proxy.example", 8080)
.get();
ชื่อโฮสต์และพอร์ตจำนวนเต็ม ระบุพร็อกซี สำหรับคำขอที่ได้รับอนุญาตไปยังหน้าสาธารณะ ให้เลือกปลายทาง HTTP จากบริการของคุณหรือจากรายการพร็อกซี HTTP URL ที่ส่งให้ connect ยังคงเป็นหน้าที่คุณต้องการ ไม่จำเป็นต้องดาวน์โหลด HTML ลงในสตริงด้วย URLConnection แยกต่างหากเพียงเพื่อเพิ่มเส้นทางนี้
proxy(String, int) เลือกพร็อกซี HTTP สำหรับคำขอนั้น หมายเลขพอร์ตอย่าง 1080 ไม่ได้เปลี่ยนโปรโตคอลเป็น SOCKS ปลายทางของพร็อกซีต้องรองรับชนิดที่กำหนดค่าไว้ jsoup ยังมีโอเวอร์โหลดที่รับ java.net.Proxy ด้วย แต่การสนับสนุนเส้นทางใดเส้นทางหนึ่งยังขึ้นอยู่กับการใช้งาน HTTP ที่ใช้อยู่
ให้ผู้ปฏิบัติงานแต่ละคนมีคำขอของตนเอง
ตัวเลือกในระดับคำขอทำให้งานคู่ขนานง่ายกว่าการเปลี่ยนคุณสมบัติระบบ JVM รอบการดาวน์โหลดแต่ละครั้ง เก็บคำขอที่เปลี่ยนแปลงได้แยกไว้สำหรับผู้ปฏิบัติงานแต่ละคน jsoup สมัยใหม่สามารถแชร์การตั้งค่าและที่เก็บคุกกี้ของเซสชันขณะสร้างคำขอใหม่:
Connection session = Jsoup.newSession();
Document first = session.newRequest()
.url("https://www.example.com/one")
.proxy("proxy-a.example", 8080)
.get();
Document second = session.newRequest()
.url("https://www.example.com/two")
.proxy("proxy-b.example", 8080)
.get();
การเรียกข้างต้นทำงานตามลำดับเพื่อความชัดเจน หากงานถูกกระจายพร้อมกัน ให้สร้างคำขออย่างเป็นอิสระแทนการเปลี่ยนพร็อกซีบน Connection ที่กำลังทำงานอยู่ เซสชันที่แชร์กันยังแชร์คุกกี้ด้วย ใช้เซสชันต่างกันเมื่อตัวตนในการท่องเว็บควรแยกจากกัน
อินเทอร์เฟซเหล่านี้มีอยู่ใน jsoup 1.21.2 อินเทอร์เฟซ newRequest() ที่ไม่มีอาร์กิวเมนต์มีมาตั้งแต่ 1.14.1 ดังนั้นแอปพลิเคชันรุ่นเก่าควรตรวจสอบการพึ่งพาของตนก่อนนำตัวอย่างเซสชันไปใช้
ข้อมูลรับรองเป็นข้อกำหนดเพิ่มเติมสำหรับพร็อกซีที่ผ่านการรับรองความถูกต้อง การเลือกเส้นทางที่สำเร็จไม่ได้ให้บัญชี และการได้รับคำท้าจากพร็อกซีแตกต่างจากการเชื่อมต่อพอร์ตของพร็อกซีนั้นไม่สำเร็จ