You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python ftplib连接域名报GAIError仅IP可连 如何先将域名解析为IP

解决方案

核心原因说明

你目前的报错首先有一个低级错误:ftp.connect的第一个参数只需要传入纯域名,不需要携带ftp://协议前缀,额外的协议头会直接导致域名解析失败。如果需要走FTP协议隐式/显式加密,可以单独调整ftplib的配置参数,不需要在host字段加协议头。

域名预解析为IP的实现方法

如果你确实需要先完成域名解析再传入IP进行连接,可以直接用Python标准库socket的gethostbyname方法实现,无需安装第三方依赖,适配Python 3.8版本。

完整修正代码示例

from ftplib import FTP
import socket

def main():
    print("Grabbing data...")
    # 预解析域名得到IP
    domain = "emi.nasdaq.com"
    ftp_ip = socket.gethostbyname(domain)
    print(f"域名解析结果:{domain} -> {ftp_ip}")
    
    with FTP() as ftp:
        # 传入解析得到的IP进行连接
        ftp.connect(ftp_ip, 21)
        # 后续可以加登录、列目录、下载文件等操作
        # ftp.login()
        # ftp.retrlines('LIST')

if __name__ == "__main__":
    main()

注意事项

  • 如果对应域名绑定了多组IP,gethostbyname只会返回第一个解析结果,如果需要获取全部解析IP可以改用socket.gethostbyname_ex方法遍历所有可用IP。
  • 部分网络环境下DNS解析可能有延迟,可根据需要给解析逻辑添加超时配置。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:04