ใช้ IP พร็อกซีกับ Undici ของ Node
แนบ Undici ProxyAgent ให้คำขอ fetch หนึ่งครั้ง และแยกพูลการเชื่อมต่อจากทราฟฟิก Node ที่ไม่เกี่ยวข้อง
Undici ส่งคำขอผ่าน dispatcher สร้าง ProxyAgent สำหรับพร็อกซี HTTP ที่เลือกแล้วส่งให้การเรียก fetch แทนการเปลี่ยน dispatcher ส่วนกลางของทั้งโปรเซส
npm install [email protected]
import { fetch, ProxyAgent } from 'undici';
const dispatcher = new ProxyAgent('http://203.0.113.10:8080');
try {
const response = await fetch('https://example.com/', {
dispatcher,
signal: AbortSignal.timeout(15000),
});
console.log(response.status);
console.log(await response.text());
} finally {
await dispatcher.close();
}
บันทึกโปรแกรมเป็นไฟล์ .mjs หรือใช้โครงการโมดูล ES เปลี่ยน IP เอกสารเป็นพร็อกซี HTTP จากรายการพร็อกซี HTTP การนำเข้าตั้งใจใช้ fetch ของ Undici ดังนั้นตัวเลือก dispatcher จึงเป็นของไคลเอนต์ในตัวอย่าง
ตรวจความเข้ากันได้ของ Node ก่อนกล่าวโทษ IP
รุ่น Node ที่ Undici รองรับขึ้นกับรุ่นแพ็กเกจ ตัวอย่างนี้ใช้ Undici 8.12.3 ซึ่งต้องการ Node 22.19.0 ขึ้นไป ข้อผิดพลาดการโหลดโมดูลหรือรุ่นเอนจินเกิดก่อนคำขอถึงพร็อกซี ตรวจข้อกำหนดของแพ็กเกจที่ติดตั้ง แทนการถือว่า Node ทุกรุ่นใช้ Undici ล่าสุดได้
agent เดียวให้บริการคำขอซ้ำได้
โปรแกรมสั้นปิด dispatcher เมื่อจบ หากแอปที่ทำงานอยู่ส่งหลายคำขอผ่านเอนด์พอยต์เดิม ให้เก็บ agent สำหรับงานนั้นและปิดเมื่องานจบ การสร้างและปิด agent ต่อ URL ขัดขวางการนำการเชื่อมต่อกลับมาใช้ที่เป็นประโยชน์
dispatcher ส่วนกลางเหมาะเฉพาะเมื่อตั้งใจเปลี่ยนในวงกว้าง การส่งอย่างชัดเจนทำให้ทดสอบ IP พร็อกซีได้ง่ายโดยไม่เปลี่ยนคำขอขาออกขององค์ประกอบอื่น
ดูคำตอบและขั้นตอนที่ล้มเหลว
fetch ไม่ถือว่าสถานะข้อผิดพลาด HTTP ทุกตัวเป็น Promise ที่ถูกปฏิเสธ 403 หรือ 429 อาจเป็นคำตอบจริงของเว็บไซต์ที่ผ่านพร็อกซี ส่วนข้อผิดพลาดการเชื่อมต่อหรืออุโมงค์อาจปฏิเสธคำขอก่อนมีออบเจ็กต์คำตอบ อ่านสถานะแยกจากข้อผิดพลาดที่การเรียกโยนออกมา
หากต้องยืนยันตัวตน ProxyAgent ของ Undici มีตัวเลือกในคอนสตรักเตอร์ อย่าเพิ่มเฮดเดอร์อนุญาตพร็อกซีในเฮดเดอร์คำขอเว็บไซต์ เพราะ agent จัดการอีกช่วงหนึ่งของการเชื่อมต่อ