我正在尝试使用请求发布来发布多个文件。
here表示的格式为:
>>> url = 'http://httpbin.org/post'
>>> multiple_files = [('images', ('foo.png', open('foo.png', 'rb'), 'image/png')),
('images', ('bar.png', open('bar.png', 'rb'), 'image/png'))]
>>> r = requests.post(url, files=multiple_files)
>>> r.text
所以我试图通过列表理解来做到这一点。但只有最后一个图片正在上传。我的理解是理解力会覆盖图像,因为所有图像都具有相同的名称“ 视觉效果”。但是我要求所有人都必须具有“ 视觉效果”的名称。
images=[list of image URLS]
files=[('visuals',(str(index)+'.jpg',requests.get(image).content,'image/jpeg')) for index,image in enumerate(images)]
requests.post(script.php,files=files)
例如,如果有20张图像,则只有20.jpg发送到我的 script.php 。
回答(不起作用)
images=response.xpath(root+'/photos//url/text()').extract()
visuals=[(str(index)+'.jpg',requests.get(image).content,'image/jpeg') for index,image in enumerate(images)]
requests.post(triggers,data={'json':json.dumps(array)},files={'visuals':visuals})
答案 0 :(得分:4)
files
的{{1}}参数应该是requests.post
。请参见示例ES6 Map vs Object: What and When。由于您将其与dict
对象一起传递,因此它将在内部强制转换为list
对象。在类型转换期间,后一个元素将使用相同的键值覆盖前一个元素!由于其中的所有元素都具有相同的键“视觉效果”,因此只有最后一个元素将保留在最后一个dict
对象中。
此问题已在请求的问题页面here中得到解答。
您提供给数据的元组列表上已调用dict()。字典(显然)不允许重复的键,但是您的元组列表具有重复的键,因此iterable中的最后一项采用该键的值...因此,我假设这是预期的行为。