我正在尝试编写一个脚本来下载文件、转换文件,然后对转换后的文件执行一个程序。
由于某种原因,curl
需要超过 1 分钟才能开始文件传输。
命令:
curl ftp://tgftp.nws.noaa.gov/SL.us008001/ST.expr/DF.gr2/DC.ndfd/AR.conus/VP.001/ds.wx.bin -o test.out
我尝试过使用和禁用活动和 EPRT 模式--ftp-pasv
,--disable-eprt
但似乎没有什么区别。
我已尝试过--verbose
,它告诉我在哪里,但我仍然不知道为什么。
它快速登录并切换到正确的目录,但一旦它尝试下载文件,它就会在那里停留一分钟多。在延迟之前,这里是详细输出:
* FTP 0x1c2b268 state change from CWD to PASV
* Connect data stream passively
< 229 Entering Extended Passive Mode (|||64103|)
有趣的是它wget
立即开始下载。我知道我可以使用它,但我想弄清楚为什么curl
会出现问题。
提前致谢。
答案1
问题出在某种中间设备(防火墙、深度检测设备等)上,它导致 EPSV 命令(IPv6 和 IPv4 的被动模式)出现问题。强制 PASV(仅限 IPv4 的被动模式)解决了--disable-epsv
该问题。如果服务器有 IPv6,并且只有 IPv6 时出现问题,也可能会出现类似的问题,但在这种情况下,服务器没有 AAAA DNS 记录。