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 ليس كافيًا. يجب أن تشمل الوجهات والمنافذ المسموح بها نقاط نهاية البيانات السلبية الخاصة بالخادم. فالتحية وتسجيل الدخول الناجحان يثبتان فقط أن مسار التحكم قد عمل.
يوفر التنفيذ مصادقة الوكيل الأساسية عندما يكون اسم مستخدم الوكيل وكلمة مروره موجودين معًا. وهذا يختلف عن تبادل USER/PASS في FTP. أما الوكيل الذي يتطلب آلية مصادقة أخرى فيحتاج إلى موصل متوافق؛ فالمنشئ لا يجعل كل الأنظمة متاحة.
تصف Commons Net هذا الصنف بأنه تجريبي، لذا قيّمه مقابل متطلبات التطبيق والوكيل قبل تبنيه. فهو عميل FTP وليس عميل FTPS أو SFTP. ولـ FTPS مع خدمة SOCKS متاحة، تُعدّ واجهة وكيل المقبس في FTPSClient مسارًا منفصلًا للعميل. ويوفر CONNECT المسار ولا يشفر بنفسه بيانات اعتماد FTP أو محتويات الملفات.
أبقِ الأخطاء مرتبطة بالمرحلة التي أنتجتها: رفض HTTP أثناء إعداد النفق، أو رفض تسجيل الدخول إلى FTP، أو فشل نقل FTP/البيانات. ولا يمكن استبدال كلمة مرور FTP أن يحل سياسة وكيل ترفض منفذ البيانات السلبي.