Как с помощью POST запроса через requests передать multipart/form-data так, чтобы ключи словаря могли дублироваться?
В этом тексте есть одинаковые ключи, для того, чтобы составить словарь для повторения запроса с помощью requests, но python не поддерживает дублирования ключей.
Пробовал удалить лишние ключи, чтобы остался один. Ничего не вышло.
Как быть?
Исходный запрос:
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="profile_showcase[]"
8
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="profile_showcase_purchaseid[]"
0
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[8_0][0][title]"
1
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[8_0][0][notes]"
1
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="profile_showcase[]"
0
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="profile_showcase_purchaseid[]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[4_0][6][notes]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][0][badgeid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][0][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][0][border_color]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][1][badgeid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][1][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][1][border_color]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][2][badgeid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][2][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][2][border_color]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][3][badgeid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][3][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][3][border_color]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][4][badgeid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][4][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][4][border_color]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][5][badgeid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][5][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[5_0][5][border_color]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[6_0][0][appid]"
730
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[7_0][0][publishedfileid]"
1388791173
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[7_0][1][publishedfileid]"
1442038664
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[7_0][2][publishedfileid]"
1497191984
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[7_0][3][publishedfileid]"
1442036684
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[9_0][0][accountid]"
30357047
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[10_0][0][appid]"
730
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[11_0][0][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[11_0][0][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][0][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][0][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][1][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][1][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][2][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][2][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][3][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][3][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][4][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[12_0][4][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[14_0][0][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[14_0][1][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[14_0][2][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[14_0][3][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[15_0][0][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[15_0][0][publishedfileid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][0][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][0][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][1][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][1][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][2][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][2][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][3][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][3][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][4][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][4][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][5][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][5][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][6][appid]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="rgShowcaseConfig[17_0][6][title]"
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="type"
showcases
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="sessionID"
3c2744810f83032ad6072bda
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="json"
1
-----------------------------26945955324554554721766291860--
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Для передачи дублирующихся ключей в form-data есть 2 способа:
>>> urllib.parse.urlencode((('a',1),('a',2)))
'a=1&a=2'
>>> urllib.parse.urlencode({'a':[1,2]},doseq=True)
'a=1&a=2'
По аналогии для multipart сработало
response = requests.post("http://httpbin.org/post", files=(('a',(None,'1')),('a',(None,2))))
Создаешь итератор (массив или кортеж) в формате (имя,(имяфайла, контент)) и передаешь через параметр files
Пример
-----------------------------26945955324554554721766291860
Content-Disposition: form-data; name="profile_showcase[]"
8
будет
("profile_showcase[]",(None, 8))