Быстрая версия: нужно ли кодировать имена параметров "форм", отправляемых с использованием стандартной кодировки multipart/form-data?
Длинная версия: форма загрузки на 1fichier.com (сервис для загрузки больших files) использует следующее, чтобы указать параметр файла для загрузки:
<input type="file" name="file[]" size="50" title="Select the files to upload" />
Имя параметра — file[] (обратите внимание на квадратные скобки).
Используя LiveHTTPHeaders, я вижу, что параметр отправляется так (т.е. со скобками) при отправке формы в Firefox. Однако для программы, которую я пишу на Python, я использую poster, чтобы иметь возможность загружать файлы с использованием стандартной кодировки multipart/form-data. Если я ввожу имя параметра в скобках, оно отправляется так:
file%5B%5D
Внутренне Poster кодирует имена параметров с помощью этой функции:
def encode_and_quote(data):
"""If ``data`` is unicode, return urllib.quote_plus(data.encode("utf-8"))
otherwise return urllib.quote_plus(data)"""
if data is None:
return None
if isinstance(data, unicode):
data = data.encode("utf-8")
return urllib.quote_plus(data)
В документации urllib.quote_plus говорится, что это требуется только для цитирования HTML формировать значения при построении строки запроса для перехода в URL». Но здесь мы делаем POST, поэтому значения формы не входят в URL-адрес.
Итак, их все еще нужно кодировать, или это ошибка плаката?