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

使用urllib3下载公开FTP文件时出现KeyError: 'ftp'错误,如何解决?

使用urllib3下载FTP文件遇到KeyError: 'ftp'的解决方案

嘿,我看到你用urllib3下载公开FTP服务器文件时碰到了KeyError: 'ftp'的问题,这其实是个常见小坑——urllib3本身并不支持FTP协议,它的核心能力是处理HTTP/HTTPS请求,所以碰到ftp://开头的URL时,就会因为识别不了协议抛出这个错误。

给你两种简单靠谱的解决方法,任选其一就行:

方法一:用Python标准库ftplib(专门处理FTP)

ftplib是Python自带的FTP操作库,功能完善,适合需要精细控制FTP操作的场景,针对这个匿名FTP服务器的下载代码如下:

from ftplib import FTP
import os

# 配置信息
ftp_server = "ftp2.datasus.gov.br"  # 去掉URL开头的ftp://
remote_file = "/pub/sistemas/tup/downloads/TabelaUnificada_200802.zip"
local_file = "./TabelaUnificada_200802.zip"

# 连接并下载
with FTP(ftp_server) as ftp:
    ftp.login()  # 匿名登录,无需用户名密码
    with open(local_file, 'wb') as f:
        ftp.retrbinary(f"RETR {remote_file}", f.write)
    print("文件下载完成!")

如果遇到需要用户名密码的FTP服务器,只需要给ftp.login()传对应参数:ftp.login("你的用户名", "你的密码")即可。

方法二:用urllib.request(支持多协议的标准库)

如果你习惯urllib系列的用法,urllib.request是更好的选择,它支持FTP、HTTP等多种协议,代码更简洁:

import urllib.request

ftp_url = 'ftp://ftp2.datasus.gov.br/pub/sistemas/tup/downloads/TabelaUnificada_200802.zip'
save_path = "./TabelaUnificada_200802.zip"

# 一行代码完成下载保存
urllib.request.urlretrieve(ftp_url, save_path)
print("文件下载完成!")

这个方法会自动处理匿名登录逻辑,非常省心。

最后补充一句:urllib3的PoolManager只针对HTTP/HTTPS协议做了适配,碰到ftp协议触发KeyError是它的设计预期,并不是bug哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:20:15