libcurl 有两种不同的方式为 FTP URL 使用 HTTP 代理。不使用隧道时,它可以发送一个目标为 FTP URL 的 HTTP GET,请求代理充当 FTP 网关。

如果服务改为期望 HTTP CONNECT 隧道,请启用 RCurl 的相应选项:

result <- RCurl::getURL(
  "ftp://ftp.example.net/pub/file.txt",
  .opts = list(
    proxy = "http://proxy.example.net:8080",
    httpproxytunnel = TRUE
  )
)

代理必须允许连接到 FTP 服务器所需的端口。仅限在 443 上使用 CONNECT 的服务,即使普通 HTTPS 浏览可用,也可能拒绝 FTP 的控制连接。

FTP 还会为列表或传输使用单独的数据连接。控制登录成功并不能证明协商好的数据目的地可以经由中间人放行。

此模式通过隧道承载 FTP 协议;它不会让明文 FTP 变成加密。需要保密时,请使用文件服务器所支持的安全协议以及匹配的 libcurl 构建。RCurl 可用的协议取决于它所使用的 libcurl 库。

相关文章