python requests - code - Cargar múltiples archivos en una sola solicitud usando el módulo de solicitudes de Python
requests-html (3)
El módulo de solicitudes de Python proporciona buena documentación sobre cómo cargar un solo archivo en una sola solicitud:
files = {''file'': open(''report.xls'', ''rb'')}
Intenté extender ese ejemplo utilizando este código en un intento de cargar varios archivos:
files = {''file'': [open(''report.xls'', ''rb''), open(''report2.xls, ''rb'')]}
pero dio lugar a este error:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1052, in splittype
match = _typeprog.match(url)
TypeError: expected string or buffer
¿Es posible cargar una lista de archivos en una sola solicitud utilizando este módulo, y cómo?
La documentation contiene una respuesta clara.
Citado
Puede enviar varios archivos en una solicitud. Por ejemplo, suponga que desea cargar archivos de imágenes a un formulario HTML con un campo de archivos múltiples ''imágenes'':
Para hacerlo, simplemente configure los archivos en una lista de tuplas de (form_field_name, file_info):
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
# {
# ...
# ''files'': {''images'': ''data:image/png;base64,iVBORw ....''}
# ''Content-Type'': ''multipart/form-data; boundary=3131623adb2043caaeb5538cc7aa0b3a'',
# ...
# }
Para cargar una lista de archivos con el mismo valor de clave en una sola solicitud, puede crear una lista de tuplas con el primer elemento en cada tupla como valor de clave y el objeto de archivo como segundo:
files = [(''file'', open(''report.xls'', ''rb'')), (''file'', open(''report2.xls'', ''rb''))]
Se pueden cargar varios archivos con diferentes valores clave agregando varias entradas de diccionario:
files = {''file1'': open(''report.xls'', ''rb''), ''file2'': open(''otherthing.txt'', ''rb'')}
r = requests.post(''http://httpbin.org/post'', files=files)