Dari: https://requests.readthedocs.io/en/latest/user/quickstart/#post-a-multipart-encoded-file
Permintaan membuatnya sangat mudah untuk mengunggah file yang dikodekan multi-bagian:
with open('report.xls', 'rb') as f:
r = requests.post('http://httpbin.org/post', files={'report.xls': f})
Itu dia. Saya tidak bercanda - ini adalah satu baris kode. File telah dikirim. Mari kita periksa:
>>> r.text
{
"origin": "179.13.100.4",
"files": {
"report.xls": "<censored...binary...data>"
},
"form": {},
"url": "http://httpbin.org/post",
"args": {},
"headers": {
"Content-Length": "3196",
"Accept-Encoding": "identity, deflate, compress, gzip",
"Accept": "*/*",
"User-Agent": "python-requests/0.8.0",
"Host": "httpbin.org:80",
"Content-Type": "multipart/form-data; boundary=127.0.0.1.502.21746.1321131593.786.1"
},
"data": ""
}
with open('report.xls', 'rb') as f: r = requests.post('http://httpbin.org/post', files={'report.xls': f})
, jadi itu akan menutup file lagi setelah dibuka.Iya. Anda akan menggunakan
urllib2
modul, dan menyandikan menggunakanmultipart/form-data
tipe konten. Berikut ini beberapa contoh kode untuk Anda mulai - ini sedikit lebih dari sekadar mengunggah file, tetapi Anda harus dapat membacanya dan melihat cara kerjanya:sumber
Satu-satunya hal yang menghentikan Anda menggunakan urlopen secara langsung pada objek file adalah kenyataan bahwa objek file builtin tidak memiliki definisi len . Cara sederhana adalah membuat subclass, yang menyediakan urlopen dengan file yang benar. Saya juga telah memodifikasi header Tipe-Konten dalam file di bawah ini.
sumber
Sepertinya permintaan python tidak menangani file multi-bagian yang sangat besar.
Dokumentasi menyarankan Anda melihat
requests-toolbelt
.Inilah halaman terkait dari dokumentasi mereka.
sumber
Perpustakaan poster Chris Atlee bekerja sangat baik untuk ini (terutama fungsi kenyamanan
poster.encode.multipart_encode()
). Sebagai bonus, ini mendukung streaming file besar tanpa memuat seluruh file ke dalam memori. Lihat juga masalah Python 3244 .sumber
Saya mencoba untuk menguji api istirahat Django dan ini bekerja untuk saya:
sumber
close()
file.Anda juga mungkin ingin melihat httplib2 , dengan contoh - contoh . Saya menemukan menggunakan httplib2 lebih ringkas daripada menggunakan modul HTTP bawaan.
sumber
requests
.sumber