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
相关产品推荐
相关产品推荐

