Python 的 requests 库上传文件报错如何解决
return self.request(‘POST’, url, data=data, json=json, **kwargs)
File “/Users/libin/pyspider_env/lib/python2.7/site-packages/requests/sessions.py”, line 488, in request
resp = self.send(prep, **send_kwargs)
File “/Users/libin/pyspider_env/lib/python2.7/site-packages/requests/sessions.py”, line 609, in send
r = adapter.send(request, **kwargs)
File “/Users/libin/pyspider_env/lib/python2.7/site-packages/requests/adapters.py”, line 473, in send
raise Connecti onError(err, request=request)
requests.exceptions.Connecti onError: (‘Connection aborted.’, error(32, ‘Broken pipe’))
谷歌了一下,也没发现什么解决的方法
Python 的 requests 库上传文件报错如何解决
遇到 requests 上传文件报错,先别慌,多半是请求格式没整对。最常见的坑就是 files 参数没传对。我直接给你个能跑的代码,你对照着看看。
import requests
# 假设你的文件叫 'myfile.txt', 服务器接收的字段名是 'userfile'
file_path = 'myfile.txt'
url = 'http://httpbin.org/post' # 这是个测试用的URL,你可以换成自己的
# 核心:正确构造 files 字典
try:
with open(file_path, 'rb') as f: # 一定要用二进制模式 'rb' 打开
files = {'userfile': (file_path, f, 'text/plain')} # 格式:(文件名, 文件对象, 可选MIME类型)
# 或者更简单的写法,让库自动判断类型:
# files = {'userfile': open(file_path, 'rb')}
# 但上面这种写法需要你手动关闭文件,不推荐。
response = requests.post(url, files=files)
print(f"状态码: {response.status_code}")
print(f"响应内容: {response.json()}") # 如果是JSON返回
except FileNotFoundError:
print(f"错误:文件 '{file_path}' 没找到,检查路径。")
except requests.exceptions.RequestException as e:
print(f"网络请求出错: {e}")
except Exception as e:
print(f"其他错误: {e}")
几个关键点:
files参数必须是字典,键是服务器要求的字段名(比如userfile、file),值是一个元组。元组结构是(文件名, 文件对象, MIME类型),后两个参数可选。直接传文件对象也行,但最好用元组形式更规范。- 文件必须用二进制模式
'rb'打开,特别是图片、视频等非文本文件,用文本模式会损坏数据。 - 如果服务器还需要其他表单字段,用
data参数一起传,比如requests.post(url, data={'key': 'value'}, files=files)。 - 错误处理很重要,用
try...except包起来,能帮你快速定位是文件找不到、网络问题还是服务器返回错误。
常见错误自查:
FileNotFoundError:文件路径错了。TypeError:files参数格式不对,很可能没构成字典或元组。- 服务器返回 4xx/5xx 错误:检查URL、字段名、认证信息(如
headers或auth)是否正确。
一句话总结:检查 files 参数格式、文件路径和打开模式,用 try-except 抓错误。
从这个信息来看是意外断开连接了。如果是墙内的话考虑挂代理。

