преобразование multipart/form-data в словарь
Можно ли как-нибудь преобразовать это:
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="sessionID"
596a2f350ffccdcab68e5408
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="type"
profileSave
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="weblink_1_title"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="weblink_1_url"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="weblink_2_title"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="weblink_2_url"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="weblink_3_title"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="weblink_3_url"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="personaName"
name
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="real_name"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="customURL"
url
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="country"
RU
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="state"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="city"
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="summary"
dsgsdfg
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="type"
profileSave
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="sessionID"
596a2f350ffccdcab68e6308
-----------------------------33331565381703838529424543671
Content-Disposition: form-data; name="json"
1
-----------------------------33331565381703838529424543671--
в словарь такого типа:
{
"sessionID": (None, "596a2f350ffccdcab68e5408"),
"type": (None, "profileSave"),
и так далее...
}
Ответы (1 шт):
Автор решения: eri
→ Ссылка
import cgi
import io
body="""-----------------------------33331565381703838529424543671
....
"""
stream = io.BytesIO(body.encode())
params = {'boundary':b'---------------------------33331565381703838529424543671'}
# boundary брать из хидера, на два минуса меньше чем в теле.
cgi.parse_multipart(stream, params)
Выход
{
"weblink_2_title":[""],
"real_name":[""],
"personaName":["name"],
"city":[""],
"state":[""],
"weblink_2_url":[""],
"weblink_1_title":[""],
"country":["RU"],
"weblink_1_url":[""],
"type":[
"profileSave",
"profileSave"
],
"weblink_3_title":[""],
"summary":["dsgsdfg"],
"json":["1"],
"weblink_3_url":[""],
"customURL":["url"],
"sessionID":[
"596a2f350ffccdcab68e5408",
"596a2f350ffccdcab68e6308"
]
}
Теряет последовательность ответов... Для последовательного чтения лучше загонять в FieldStorage напрямую, как это делается в parse_multipart без последней команды.
headers = cgi.Message()
h.set_type('multipart/form-data; boundary=---------------------------33331565381703838529424543671')
fs=cgi.FieldStorage(stream, keep_blank_values=True, headers=headers, environ={'REQUEST_METHOD': 'POST'})
Все поля, с которыми можно работать в другом вашем вопросе получаются так
files = [(field.name,(field.filename,field.value)) for field in fs.value]
Ответ на этот вопрос:
dict(files)