我正在尝试使用 Java 应用程序通过 FTP 下载文件。可从此网页访问 FTP 网址:http://professionnels.ign.fr/adminexpress。更具体地说,我正在尝试下载此文件。在家里,我可以使用我的 java 应用程序、Firefox 或 Chrome 成功下载该文件。从我的工作来看,我只能对 Firefox 和 Chrome 做同样的事情。我的应用程序拒绝下载任何内容。注意:在工作中,浏览器和我的应用程序使用相同的 HTTP 代理访问互联网。我正在使用Apache Commons Net 3.6。这是我的应用程序的 FTP 交换示例。我无法嗅探 Chrome 或 Firefox 的那些。220 Bienvenue sur le site FTP de L INSTITUT NATIONAL DE L INFORMATION GEOGRAPHIQUE ET FORESTIEREUSER *******331 Please specify the password.PASS *******230 Login successful.TYPE I200 Switching to Binary mode.PASV227 Entering Passive Mode (192,134,132,16,65,180).RETR /ADMIN-EXPRESS-COG_2-0__SHP_WM__FRA_2019-05-20.7z.001425 Failed to establish connection.
1 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
博士
事实证明,我工作中的 HTTP 代理已经处理了所有的 FTP 交换。这就是 Firefox 和 Chrome 可以下载该文件的原因。当它们不在 HTTP 代理后面时,它们似乎通过直接发送 FTP 命令充当 FTP 客户端。
使用 ftp url 向 HTTP 代理发送一个简单的 HTTP GET 请求就足以下载文件。
以下是我在调查过程中找到的解决方案的总结:
使用被动模式(PASV 命令)
检查是否有要使用的 FTP 代理而不是 HTTP 代理
检查 FTP 服务器的配置(如果您有权访问它)
检查 HTTP 代理的配置(如果您有权访问它)
准确地说,浏览器执行一个简单的 HTTP 请求,如下所述:
GET ftp://user:passw0rd@example.com/file.ext HTTP/1.1 Host: example.com User-Agent: WebBrowser-UA/x.y.z ...
然后 HTTP 代理解析 FTP url 并连接到 FTP 服务器。HTTP 代理将文件内容作为正常的 HTTP 响应返回。
HTTP/1.1 200 OK Last-Modified: Tue, 21 May 2019 11:23:00 GMT Content-Length: 115545060Content-Type: octet/stream Connection: Keep-Alive Age: 22Date: Thu, 27 Jun 2019 10:27:09 GMT (file content here...)
但是,就我而言,HTTP 代理允许我连接到 FTP 服务器并仅在命令FTP 通道上进行交换。数据通道似乎在 ACTIVE 或 PASSIVE 模式下被阻塞。
在我的调查中,我发现很多人遇到了同样的问题。他们找到的解决方案(当他们找到一个......)不适用于我。以下是所有这些问题中表达的解决方案的总结:
使用被动模式(PASV 命令)
检查是否有要使用的 FTP 代理而不是 HTTP 代理
检查 HTTP 代理是否直接处理 FTP 交换
检查 FTP 服务器的配置(如果您有权访问它)
检查 HTTP 代理的配置(如果您有权访问它)
添加回答
举报
0/150
提交
取消