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 پروکسی را فراهم می‌کند. این با تبادل USER/PASS در FTP متفاوت است. پروکسی که مکانیزم احراز هویت دیگری می‌خواهد به یک اتصال‌دهنده سازگار نیاز دارد؛ سازنده همه طرح‌ها را در دسترس قرار نمی‌دهد.

Commons Net این کلاس را آزمایشی مستند می‌کند، بنابراین پیش از پذیرش آن را در برابر نیازهای برنامه و پروکسی ارزیابی کنید. این یک کلاینت FTP است، نه کلاینت FTPS یا SFTP. برای FTPS با سرویس SOCKS در دسترس، رابط سوکت-پروکسی FTPSClient مسیر کلاینت جداگانه‌ای است. CONNECT مسیر را فراهم می‌کند و خودش اطلاعات ورود FTP یا محتوای فایل‌ها را رمزگذاری نمی‌کند.

خطاها را به مرحله‌ای که آن‌ها را تولید کرده است پیوند دهید: رد HTTP در هنگام راه‌اندازی تونل، رد ورود FTP، یا شکست انتقال FTP/داده. جایگزینی گذرواژه FTP نمی‌تواند سیاست پروکسی‌ای را حل کند که درگاه داده غیرفعال را رد می‌کند.

مقالات مرتبط