Ich versuche, einige Dateien und Parameter als Multi-Part im folgenden Muster zu senden. Ich habe sowohl Diktat als auch Liste ausprobiert. list
warf eine HTTP 415
. Also ging ich mit dict
weiter. Ich möchte einige Parameter sowie mehrere Dateien unter einem gemeinsamen Namen "Datei" (zusammen mit ihren jeweiligen Dateinamen) veröffentlichen.Komplexe POST-Anfrage in Python - Multipart-Dateien - zu viele Werte zum Entpacken
Die String-Parameter arbeiten gut, der Fehler mit der Datei war laden
Daten innerhalb des mehrteiligen weitergegeben dict Objekt
multipart = {
'param1': 'paramVal1',
'param2': 'paramVal2',
'file': (("file1.xml", ByteIO), ("file1.xml", ByteIO)),
}
POST python-requests
requests.post(url='http://localhost:8888/upload',files=multipart)
Wirft die Fehler
File "C:\Python36\lib\site-packages\requests\api.py", line 107, in post
return request('post', url, data=data, json=json, **kwargs)
File "C:\Python36\lib\site-packages\requests\api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python36\lib\site-packages\requests\sessions.py", line 454, in request
prep = self.prepare_request(req)
File "C:\Python36\lib\site-packages\requests\sessions.py", line 388, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "C:\Python36\lib\site-packages\requests\models.py", line 296, in prepare
self.prepare_body(data, files, json)
File "C:\Python36\lib\site-packages\requests\models.py", line 447, in prepare_body
(body, content_type) = self._encode_files(files, data)
File "C:\Python36\lib\site-packages\requests\models.py", line 142, in _encode_files
fn, fp, ft, fh = v
ValueError: too many values to unpack (expected 4)
Erwartete POST Körper
------WebKitFormBoundaryZ7HAof4KTgAB21YV
Content-Disposition: form-data; name="file"; filename="file1.xml"
Content-Type: text/xml
------WebKitFormBoundaryZ7HAof4KTgAB21YV
Content-Disposition: form-data; name="file"; filename="file2.xml"
Content-Type: text/xml
------WebKitFormBoundaryZ7HAof4KTgAB21YV
Content-Disposition: form-data; name="param1"
paramVal1
------WebKitFormBoundaryZ7HAof4KTgAB21YV
Content-Disposition: form-data; name="param2"
paramVal2
------WebKitFormBoundaryZ7HAof4KTgAB21YV--
konnte ich die POST Arbeit mit dem String params bekommen. Das Problem lag bei den Dateien. Wenn Sie es auf diese Weise übergeben, würden Sie zwei POST-Namen "file1.xml" und "file2.xml" generieren, während ich für beide Dateien den POST-Namen "file" benötige. –