Commons Net FTPHTTPClient: อุโมงค์พร็อกซี HTTP สำหรับ FTP แบบพาสซีฟ
ส่งต่อการควบคุม FTP และการเชื่อมต่อข้อมูลแบบพาสซีฟผ่านพร็อกซี HTTP ด้วยไคลเอนต์เฉพาะของ Commons Net
Apache Commons Net มี FTPHTTPClient สำหรับ FTP ผ่านพร็อกซี HTTP CONNECT จุดเด่นที่มีประโยชน์ไม่ใช่แค่การไปถึงพอร์ตล็อกอิน FTP เท่านั้น แต่ยังสร้างอุโมงค์พร็อกซีสำหรับการเชื่อมต่อข้อมูลแบบพาสซีฟที่ใช้โดยรายการและการถ่ายโอนไฟล์ด้วย
คอนสตรักเตอร์รับปลายทางของพร็อกซีและข้อมูลรับรองพร็อกซีแบบไม่บังคับ เซิร์ฟเวอร์ FTP ยังคงเป็นอาร์กิวเมนต์ของ connect และ login รับบัญชี FTP:
FTPHTTPClient ftp = new FTPHTTPClient(
"proxy.example.net", 8080, proxyUser, proxyPassword
);
try {
ftp.connect("ftp.example.net", 21);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
throw new IOException(ftp.getReplyString());
}
if (!ftp.login(ftpUser, ftpPassword)) {
throw new IOException(ftp.getReplyString());
}
ftp.enterLocalPassiveMode();
if (!ftp.setFileType(FTP.BINARY_FILE_TYPE)
|| !ftp.retrieveFile(remoteFile, output)) {
throw new IOException(ftp.getReplyString());
}
ftp.logout();
} finally {
if (ftp.isConnected()) {
ftp.disconnect();
}
}
ส่วนการถ่ายโอนนี้ถือว่ามีการนำเข้า FTP ของ Commons Net, java.io.IOException, ตัวแปรข้อมูลรับรองที่แอปพลิเคชันจัดให้ และสตรีมเอาต์พุตที่เป็นของผู้เรียก remoteFile คือชื่อไฟล์ที่ต้องการฝั่งเซิร์ฟเวอร์ แอปพลิเคชันยังต้องปิดสตรีมเอาต์พุตของตนในจังหวะที่เหมาะสม
ตั้งโหมดพาสซีฟหลังจากเชื่อมต่อและก่อนการดำเนินการข้อมูล การใช้งานของ FTPHTTPClient จะปฏิเสธการเชื่อมต่อข้อมูลในโหมดแอกทีฟ ในโหมดพาสซีฟจะเจรจาปลายทางข้อมูลกับ FTP และเปิดการเชื่อมต่ออีกครั้งไปยังพร็อกซี HTTP จากนั้นขออุโมงค์ CONNECT ไปยังปลายทางนั้น
อุโมงค์ที่สองนี้อธิบายขอบเขตที่พบบ่อย: การอนุญาตพร็อกซีสำหรับพอร์ตควบคุม FTP ไม่เพียงพอ ปลายทางและพอร์ตที่อนุญาตต้องรวมปลายทางข้อมูลแบบพาสซีฟของเซิร์ฟเวอร์ด้วย การทักทายและล็อกอินที่สำเร็จพิสูจน์เพียงว่าเส้นทางควบคุมทำงานได้
การใช้งานจัดให้มีการรับรองพร็อกซีแบบ Basic เมื่อมีทั้งชื่อผู้ใช้และรหัสผ่านของพร็อกซี ซึ่งแตกต่างจากการแลกเปลี่ยน FTP USER/PASS พร็อกซีที่ต้องการกลไกการรับรองอื่นต้องใช้คอนเนกเตอร์ที่เข้ากันได้ คอนสตรักเตอร์ไม่ได้ทำให้ทุกสกีมใช้งานได้
Commons Net จัดทำเอกสารคลาสนี้ว่าเป็นคลาสทดลอง ดังนั้นควรประเมินกับความต้องการของแอปพลิเคชันและพร็อกซีก่อนนำไปใช้ มันเป็นไคลเอนต์ FTP ไม่ใช่ไคลเอนต์ FTPS หรือ SFTP สำหรับ FTPS ที่มีบริการ SOCKS อินเทอร์เฟซซ็อกเก็ต-พร็อกซีของ FTPSClient เป็นเส้นทางไคลเอนต์แยกต่างหาก CONNECT ให้เส้นทางและไม่ได้เข้ารหัสข้อมูลรับรอง FTP หรือเนื้อหาไฟล์ด้วยตัวเอง
เก็บข้อผิดพลาดไว้กับขั้นตอนที่ทำให้เกิด: การปฏิเสธ HTTP ระหว่างการตั้งอุโมงค์ การปฏิเสธการล็อกอิน FTP หรือความล้มเหลวในการถ่ายโอน FTP/ข้อมูล การเปลี่ยนรหัสผ่าน FTP ไม่สามารถแก้ไขนโยบายพร็อกซีที่ปฏิเสธพอร์ตข้อมูลแบบพาสซีฟได้