第二个POST请求中的多部分编码文件总是为空

0 投票
1 回答
651 浏览
提问于 2025-04-17 18:20

我需要通过POST请求在两个不同的网站上发送一个文件。所以,我使用了Requests库。

在第二个响应中,照片的大小总是为零。即使我改变网站的顺序也是如此。

import requests

data = {'id': 1}

f = open('/tmp/photo7.jpg', 'rb')
image = {'image': ('photo7.jpg', f)}

# works fine
requests.post('http://site.com/', data=data, files=image)
# empty file
requests.post('http://othersite.com/', data=data, files=image)

这可能是什么问题呢?

我觉得问题可能出在文件对象当前的位置(可能在第一次响应后,它的位置在文件的末尾),但我不太确定。

我无法正确使用seek(0),错误信息在这里:http://pastebin.com/gnD2c1AR

谢谢。

1 个回答

2

使用seek是正确的做法,但在这一行中,你把seek的结果(这个结果会是0)传给了requests.post,而不是传文件句柄。

files = {'image': ('photo7.jpg', f.seek(0))}

试试这个:

...
requests.post('http://site.com/', data=data, files=image)
f.seek(0)
requests.post('http://othersite.com/', data=data, files=image)

撰写回答