Czy istnieje sposób na wysłanie pliku przy użyciu POST ze skryptu w Pythonie?
python
post
file-upload
http-post
Tylko czytać
źródło
źródło
with open('report.xls', 'rb') as f: r = requests.post('http://httpbin.org/post', files={'report.xls': f})
, więc po otwarciu ponownie zamyka plik.Tak. Możesz użyć
urllib2
modułu i zakodować przy użyciumultipart/form-data
typu zawartości. Oto przykładowy kod na początek - to trochę więcej niż tylko przesyłanie plików, ale powinieneś być w stanie go przeczytać i zobaczyć, jak to działa:źródło
Jedyne co powstrzymuje Cię przed skorzystaniem z urlopen bezpośrednio na obiekcie pliku to fakt, że wbudowany obiekt plikowy nie ma definicji len . Prostym sposobem jest utworzenie podklasy, która zapewni urlopen z poprawnym plikiem. Zmodyfikowałem również nagłówek Content-Type w poniższym pliku.
źródło
Wygląda na to, że żądania Pythona nie obsługują bardzo dużych plików wieloczęściowych.
Dokumentacja zaleca zapoznanie się z
requests-toolbelt
.Oto odpowiednia strona z ich dokumentacji.
źródło
Biblioteka plakatów Chrisa Atlee bardzo dobrze się do tego nadaje (szczególnie funkcja wygodna
poster.encode.multipart_encode()
). Dodatkowo obsługuje przesyłanie strumieniowe dużych plików bez ładowania całego pliku do pamięci. Zobacz także wydanie Pythona 3244 .źródło
Próbuję przetestować api django rest i działa dla mnie:
źródło
close()
o pliku.Możesz również rzucić okiem na httplib2 z przykładami . Uważam, że użycie httplib2 jest bardziej zwięzłe niż użycie wbudowanych modułów HTTP.
źródło
requests
zamiast tego.źródło