首页 > 其他分享 >apache net FTPClient 通过 Http 代理访问 FTP服务器

apache net FTPClient 通过 Http 代理访问 FTP服务器

时间:2023-07-28 10:36:39浏览次数:30  
标签:FTP Http proxyClient return debug apache 服务器 logger


前言

因为特殊原因,需要在服务器上安装一个代理程序,通过代理程序才能访问到安全域内的一台指定IP服务器。该服务器上安装了FTP服务,需要用程序读写FTP上的文件。
之前在不使用代理程序的服务器上测试FTP连接,没有任何问题,换到这台服务器上有问题,所以记录一下处理过程。


文章目录

  • 前言
  • 问题发现
  • FTPHTTPClient


问题发现

在安装有代理程序的服务器上,通过资源管理器、FTP客户端、FTP Cli 都可以正常进行访问,唯独Java 程序开发的FTPClient 有问题,通过抓包发现,其他的客户端程序在访问时,都会通过代理程序进行网络流量代理,而Java 程序没有走网络代理,FTPClient直接走了网卡的连接。

FTPHTTPClient

apache net FTPClient 通过 Http 代理访问 FTP服务器_ftp


翻看整个Apache Net Ftp 相关的API doc 文档,发现FTPClient 有各子类可以针对这种情况进行代理。

就是把之前的 FTPClient 对象换成FTPHTTPClient 对象即可。

/**
     * @param hostname 服务器IP或主机名
     * @param port     服务器端口号
     * @param username 用户名
     * @param password 密码
     * @return FTPClient
     * @Description 检测FTP服务器是否可用
     */
    public static boolean checkAlive(String hostname, Integer port, String username, String password) throws IOException {
        try {
            FTPHTTPClient proxyClient = new FTPHTTPClient("127.0.0.1", 9988);
            //设置字符集编码,避免乱码问题
            proxyClient.setControlEncoding(CharsetUtil.UTF_8);
            //这个设置允许被动连接--访问远程ftp时需
            proxyClient.enterLocalPassiveMode();
            logger.debug("--------get ftp server ----------");
            logger.debug("地址 is -----> " + hostname);
            logger.debug("端口 is ---------> " + port);
            logger.debug("用户名 is -----> " + username);
            logger.debug("密码 is -----> " + password);
            logger.debug("--------get ftp server ----------");

            proxyClient.connect(hostname, port);
            //登录ftp服务器
            proxyClient.login(username, password);
            //是否成功登录服务器
            int replyCode = proxyClient.getReplyCode();
            logger.info("是否登录成功--------> " + replyCode);
            //return(reply >= 200 && reply < 300)不是这个范围的就是失败
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                //失败
                logger.error("未连接到FTP服务器,用户名或密码错误");
                //连接失败,更新FTP服务状态
                return false;
            } else {
                //成功
                logger.info("FTP服务器连接成功");
                return true;
            }
        } catch (SocketException e) {
            logger.error("创建ftp连接异常");
            e.printStackTrace();
            return  false;
        } catch (IOException e){
            e.printStackTrace();
            logger.error("FTP服务器的IP地址或端口号有误,请正确配置");
            return  false;
        }
    }


标签:FTP,Http,proxyClient,return,debug,apache,服务器,logger
From: https://blog.51cto.com/u_13912333/6879033

相关文章

  • ubuntu 使用vsftpd 创建FTP服务(用户名密码登录,限制列出目录)
    vsftpd介绍ubuntu安装vsftpd配置vsftpd备份vsftpdconfig编辑vsftpdconfig创建登录用户添加vsftpd登录用户添加vsftpd登录用户对目录树的权限重启vsftpd服务验证ftp服务vsftpd介绍vsftpd是“verysecureFTPdaemon”的缩写,安全性是它的一个最大的特点。vsftpd是一个UNIX......
  • 要实现Java中的Excel导入导出功能,可以使用Apache POI库。
    下面是一个简单的示例:导入Excel文件:importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjava.io.FileInputStream;importjava.io.IOException;publicclassExcelImportExample{publicstaticvoidmain(String[]args){......
  • FTPBox Starter
    目录FTPBox是什么?Maven依赖配置单主机配置多主机配置多Host使用手册使用APIuploaddownloadexistslistexecuteexecuteWithoutResultGithub:https://github.com/lihewei7/ftpbox-spring-boot-starterGitee:https://gitee.com/lihewei7/ftpbox-spring-boot-starterFTPBox是什么......
  • http的参数和请求体
    在HTTP中,参数(parameters)和请求主体(body)是两种不同的方式用于向服务器传递数据。它们有不同的特点和适用场景。参数(Parameters):参数通常通过URL的查询字符串(querystring)传递,也就是在URL中使用?符号,后面跟着key=value形式的参数对,多个参数用&符号分隔。例如:http://example.com......
  • linux XFTP权限不足、上传失败
    问题使用XFTP上传失败一、权限不够前提:使用root用户创建了/opt/jdk然后使用普通的user登录连接ftp但是user对jdk文件对并没有w的权限,因此会上传失败解决办法使用root登录ftp增加ftp的权限chmodo+w/opt/jdk......
  • springboot上传图片后通过http访问图片
    需要上传图片或pdf文件,放在服务器本地磁盘中,比如window服务器的D:/YG/盘符下,此时想要通过http的方式直接访问图片或pdf 1.图片存储在本地磁盘,实现WebMvcConfigurer接口添加本地静态资源访问过滤2.图片存储在本地磁盘,nginx动静分离  第一种方式:@Configurationpubli......
  • Apache Log4j配置说明
    ApacheLog4j配置说明本文详细介绍Log4j的所有配置属性。author:ZJ 07-3-17Blog: [url]http://zhangjunhd.blog.51cto.com/[/url]1.Log4j简介Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息。Log4j主要由三大类组件构成:1)Logger-负责输出日志信息,并能够......
  • 获取Jenkins默认ftp插件创建的主机密码
    场景:上任Jenkins管理员离职,它默认ftp插件创建的主机密码并没有交接到你手上。解决办法:直接使用pipeline解决。代码:pipeline{  agentany  stages{        stage('getftppassword'){      agentnone      steps{    ......
  • android studio okhttp3.x和okhttp4.x共存
    AndroidStudio中实现OkHttp3.x和OkHttp4.x共存的步骤概述在Android开发过程中,我们常常会用到网络请求库OkHttp来进行网络请求操作。有时候,我们可能需要同时使用不同版本的OkHttp库来满足不同的需求。本文将详细介绍如何在AndroidStudio中实现OkHttp3.x和OkHttp4.x的共存。步骤......
  • VS 还原 NuGet 程序包时出错: 无法加载源 https://dotnet.myget.org/F/aspnetcore-dev
    错误还原NuGet程序包时出错:无法加载源https://dotnet.myget.org/F/aspnetcore-dev/api/v3解决方法在新源中添加地址:https://www.nuget.org/api/v2/......