425无法建立连接

时间:2019-06-26 15:12:07

标签: java ftp apache-commons-net

我正在尝试使用Java应用程序通过FTP下载文件。

可从以下网页访问FTP网址:http://professionnels.ign.fr/adminexpress。 更具体地说,我正在尝试下载this file

  • 我可以在家中使用Java应用程序,Firefox或Chrome成功下载文件。
  • 根据我的工作,我只能使用Firefox和Chrome进行相同的操作。我的应用程序拒绝下载任何内容。

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.

1 个答案:

答案 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通道上进行交换。数据通道在“主动”或“被动”模式下似乎被阻止。

在调查过程中,我发现很多人遇到了同样的问题。他们找到的解决方案(当他们找到一个...时)不适用于我。这是所有这些问题中表达的解决方案的总结:

  • 使用被动模式(PASV命令)
  • 检查是否要使用FTP代理而不是HTTP代理
  • 检查HTTP代理是否直接处理FTP交换
  • 检查FTP服务器的配置(如果可以访问)
  • 检查HTTP代理的配置(如果可以访问)

参考: