You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FTP连接故障排查:对接证券交易所外部FTP站点的接口开发问题

解决隐式FTP over TLS连接问题

Hey there, let's break down why your FTP connection is hanging without any feedback and fix it step by step!

核心问题分析

Your target FTP site requires Require implicit FTP over TLS, but your current code has a few critical issues:

  • You're using the regular ftplib.FTP class instead of handling implicit TLS correctly
  • You've set an impossible timeout of 0.001 seconds (way too short to establish any connection)
  • You're calling login() twice, which will cause unexpected behavior
  • Implicit TLS needs an immediate switch to encrypted mode right after connecting

修正后的代码

Here's a corrected version that handles implicit FTP over TLS properly, with error handling to show you exactly what's going wrong:

from ftplib import FTP_TLS

def connectftp():
    # 隐式FTP over TLS默认使用990端口(你的端口未填写,这是标准默认值)
    ftp = FTP_TLS('212.31.105.26', port=990, timeout=30)
    
    # 隐式TLS要求连接后立即切换到加密模式
    ftp.prot_p()
    
    # 获取并打印服务器欢迎信息
    welcome_msg = ftp.getwelcome()
    print("服务器欢迎信息:", welcome_msg)
    
    # 执行登录(只需要调用一次!)
    login_response = ftp.login(user='L12', passwd='GetConnected')
    print("登录响应:", login_response)
    
    # 可选:通过列出目录内容测试连接是否正常
    print("\n当前目录文件列表:")
    ftp.dir()
    
    # 关闭连接
    ftp.quit()

if __name__ == "__main__":
    try:
        connectftp()
    except Exception as e:
        print("\n连接出错啦:", str(e))

关键说明

  • 隐式TLS vs 显式TLS:隐式TLS从连接建立开始就全程加密(使用990端口),而显式TLS是先明文连接再升级加密。你的目标站点要求隐式,所以我们用FTP_TLS类+990端口+立即调用prot_p()来切换加密。
  • 超时设置:0.001秒的超时完全不合理,30秒的设置给网络连接留出了足够的时间。
  • 错误捕获try-except块会捕获并显示超时、凭证错误、防火墙拦截等问题,再也不会出现毫无响应的情况。

额外排查点

如果还是连接失败,可以检查这些内容:

  • 确认目标站点的端口确实是990(部分自定义配置可能使用其他端口)
  • 确保你的防火墙/网络允许访问212.31.105.26的990端口
  • 仔细核对用户名和密码的正确性(即使你提供的是示例,真实环境中务必确认)

内容的提问来源于stack exchange,提问作者Nelboy13

火山引擎 最新活动