如何在python中发送带有重复数据的请求?

时间:2013-10-27 17:31:30

标签: python python-requests

我需要发送带有重复数据的请求。因为我听说我不能发送重复项,因为请求使用dict而我无法在dict中获得重复项。

我需要得到什么(从小提琴手嗅探日志)

------WebKitFormBoundaryJm0Evrx7PZJnQkNw
Content-Disposition: form-data; name="file[]"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryJm0Evrx7PZJnQkNw
Content-Disposition: form-data; name="file[]"; filename="qwe.txt"
Content-Type: text/plain

example content of file qwe.txt blablabla

我的剧本:

requests.post(url, files={'file[]': open('qwe.txt','rb'), 'file[]':''})

=>得到这个(来自Fiddler的日志)。一个文件[]消失了。

--a7fbfa6d52fc4ddd8b82ec8f7055c88b
Content-Disposition: form-data; name="file[]"; filename="qwe.txt"

example content of file qwe.txt blablabla

我试过了:

requests.post(url, data={"file[]":""},files={'file[]': open('qwe.txt','rb')})

但是没有:filename =“”和content-type

--a7fbfa6d52fc4ddd8b82ec8f7055c88b
Content-Disposition: form-data; name="file[]"

--a7fbfa6d52fc4ddd8b82ec8f7055c88b
Content-Disposition: form-data; name="file[]"; filename="qwe.txt"
Content-Type: text/plain

example content of file qwe.txt blablabla

有没有办法在python-requests中手动添加?

1 个答案:

答案 0 :(得分:1)

requests 1.1.0开始,您可以使用元组列表而不是dict作为files参数传递。每个元组中的第一个元素是多部分表单的名称,可以是内容,也可以是包含文件名,内容和(可选)内容类型的其他元组,因此在您的情况下:

files = [('file[]', ("", "", "application/octet-stream")),
         ('file[]', ('qwe.txt', open('qwe.txt','rb'), 'text/plain'))]
requests.post(url, files=files)

应该产生你描述的结果。