¿Hay alguna manera de enviar un archivo usando POST desde un script de Python?
python
post
file-upload
http-post
Solo lectura
fuente
fuente
with open('report.xls', 'rb') as f: r = requests.post('http://httpbin.org/post', files={'report.xls': f})
lugar, por lo que cierra el archivo nuevamente después de abrirlo.Si. Usaría el
urllib2
módulo y codificaría usando elmultipart/form-data
tipo de contenido. Aquí hay un código de muestra para comenzar: es un poco más que solo cargar archivos, pero debería poder leerlo y ver cómo funciona:fuente
Lo único que le impide usar urlopen directamente en un objeto de archivo es el hecho de que el objeto de archivo incorporado carece de una definición de len . Una manera simple es crear una subclase, que proporciona urlopen con el archivo correcto. También he modificado el encabezado Content-Type en el archivo a continuación.
fuente
Parece que las solicitudes de Python no manejan archivos de varias partes extremadamente grandes.
La documentación recomienda que lo investigue
requests-toolbelt
.Aquí está la página pertinente de su documentación.
fuente
La biblioteca de carteles de Chris Atlee funciona muy bien para esto (particularmente la función de conveniencia
poster.encode.multipart_encode()
). Como beneficio adicional, admite la transmisión de archivos grandes sin cargar un archivo completo en la memoria. Ver también Python número 3244 .fuente
Estoy tratando de probar la django rest api y está funcionando para mí:
fuente
close()
un archivo.También es posible que desee echar un vistazo a httplib2 , con ejemplos . Creo que usar httplib2 es más conciso que usar los módulos HTTP integrados.
fuente
requests
lugar.fuente