我正在尝试使用Java应用程序通过FTP下载文件。
可从以下网页访问FTP网址:http://professionnels.ign.fr/adminexpress。 更具体地说,我正在尝试下载this file。
NOTA::在工作中,浏览器和我的应用程序使用相同的HTTP代理访问Internet。
我正在使用Apache Commons Net 3.6。
这是我的应用程序的FTP交换的示例。我无法嗅探那些Chrome或Firefox。
220 Bienvenue sur le site FTP de L INSTITUT NATIONAL DE L INFORMATION GEOGRAPHIQUE ET FORESTIERE
USER *******
331 Please specify the password.
PASS *******
230 Login successful.
TYPE I
200 Switching to Binary mode.
PASV
227 Entering Passive Mode (192,134,132,16,65,180).
RETR /ADMIN-EXPRESS-COG_2-0__SHP_WM__FRA_2019-05-20.7z.001
425 Failed to establish connection.
答案 0 :(得分:1)
tl; dr
事实证明,我工作中的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: 115545060
Content-Type: octet/stream
Connection: Keep-Alive
Age: 22
Date: Thu, 27 Jun 2019 10:27:09 GMT
(file content here...)
但是,就我而言,HTTP代理允许我连接到FTP服务器并仅在 command FTP通道上进行交换。数据通道在“主动”或“被动”模式下似乎被阻止。
在调查过程中,我发现很多人遇到了同样的问题。他们找到的解决方案(当他们找到一个...时)不适用于我。这是所有这些问题中表达的解决方案的总结:
参考: