2016-03-29 17 views
0

İstekleri kullanarak bir dosya göndermek istiyorum ancak sunucu ***** adresinde ayarlanmış sabit bir sınırla çalışıyor. Sadece bir dosya gönderebiliyorum ama requests modülü rasgele bir sınır yaratıyor. Nasıl yazabilirim?POST için çok yönlü/form verisi isteyerek POST için python ayar sınırı

import requests 

url='http://xxx.xxx.com/uploadfile.php' 
fichier= {'uploadedfile':open('1103290736_2016_03_23_13_32_55.zip','rb')} 
headers2={'Connection':'Keep-Alive','User-Agent':'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)','Accept-Encoding':'gzip'} 
session= requests.Session() 
session.post(url,headers=headers2,files=fichier) 
session.close() 
+0

Bu bir ** çok ** bozuk sunucudır. Sunucuyu tamir edemez misin? –

+0

Kendi kodlamanızı yapmalı ve “Content-Type” başlığını içerdiği sınırla ayarlamanız gerekir. –

+0

İçerik Türü'nü nasıl ayarlayacağımı biliyorum, ancak kendi kodlamamı nasıl yapacağımı bilmiyorum. bir örnek verebilir misin –

cevap

1

Boy, bu bir çok kırık sunucu bu. Yapabilirseniz, sunucuyu düzeltin.

requests seçiminin ne limiti olduğunu söyleyemezsiniz. Bunun yerine email.mime package kullanarak kendi multipart/form-data yükü inşa edebilirsiniz:

from email.mime.multipart import MIMEMultipart 
from email.mime.application import MIMEApplication 

related = MIMEMultipart('form-data', '*****') # second argument is the boundary. 
file_part = MIMEApplication(
    open('1103290736_2016_03_23_13_32_55.zip', 'rb').read(), 
    # optional: set a subtype: 'zip', 
) 
file_part.add_header('Content-disposition', 'form-data; name="uploadedfile"') 
related.attach(file_part) 

body = related.as_string().split('\n\n', 1)[1] 
headers = dict(related.items()) 
headers['User-Agent'] = 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)' 

r = session.post(url, data=body, headers=headers) 

Bu başlık olarak Content-Type: multipart/form-data; boundary="*****" ayarlar ve vücut (-- uygun öncesi ve postfixes ile) sınır olarak ***** kullanır.

0

Basit bir alternatif requests-toolbelt; Bu GitHub issue thread alınan örnek aşağıda:

from requests_toolbelt import MultipartEncoder 

fields = { 
# your multipart form fields 
} 

m = MultipartEncoder(fields, boundary='my_super_custom_header') 
r = requests.post(url, headers={'Content-Type': m.content_type}, data=m.to_string()) 

Ancak bu fazladan bağımlılığını tanıtır ve slow to upload large files olabilir.