Создание многочастной границы
Я пишу script, который загружает файл в cgi script, который ожидает многостраничный запрос, такой как форма на странице HTML. boundary
- это уникальный токен, который аннотирует содержимое файла в теле запроса. Вот пример тела:
--BOUNDARY
Content-Disposition: form-data; name="paramname"; filename="foo.txt"
Content-Type: text/plain
... file contents here ...
--BOUNDARY--
boundary
не может присутствовать в содержимом файла по понятным причинам.
Что мне делать, чтобы создать уникальную границу? Должен ли я генерировать случайную строку, проверить, находится ли она в содержимом файла, а если она есть, создать новую, полоскать и повторить, пока у меня не будет уникальной строки? Или достаточно "довольно случайного токена" (например, сочетание метки времени, идентификатора процесса и т.д.)?
Ответы
Ответ 1
Если вы чувствуете себя параноидальным, вы можете создать случайную границу и искать ее в строке, которую нужно отправить, добавить случайный char в find. Но мой опыт - любая произвольная строка, отличная от словаря, из 10 или около того символов, о которых невозможно сделать, поэтому выбор чего-то типа --- ГРАНИЦЫ --- ГРАНИЦЫ --- ГРАНИЦЫ --- вполне достаточен.
Ответ 2
Если вы используете что-то достаточно случайное, как GUID, не нужно искать охоту через полезную нагрузку, чтобы проверить псевдоним границы. Что-то вроде: -
= ---- NextPart_3676416B-9AD6-440C-B3C8-FC66DDC7DB45
Заголовок:....
Payload
---- = NextPart_3676416B-9AD6-440C-B3C8-FC66DDC7DB45 -
Ответ 3
Для Java-парней:
protected String generateBoundary() {
StringBuilder buffer = new StringBuilder();
Random rand = new Random();
int count = rand.nextInt(11) + 30; // a random size from 30 to 40
for (int i = 0; i < count; i++) {
buffer.append(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]);
}
return buffer.toString();
}
private final static char[] MULTIPART_CHARS =
"-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
.toCharArray();
Ссылка URL: http://hc.apache.org/httpcomponents-client-ga/httpmime/xref/org/apache/http/entity/mime/MultipartEntity.html