Подтвердить что ты не робот

Создание многочастной границы

Я пишу script, который загружает файл в cgi script, который ожидает многостраничный запрос, такой как форма на странице HTML. boundary - это уникальный токен, который аннотирует содержимое файла в теле запроса. Вот пример тела:

--BOUNDARY
Content-Disposition: form-data; name="paramname"; filename="foo.txt"
Content-Type: text/plain

... file contents here ...
--BOUNDARY--

boundary не может присутствовать в содержимом файла по понятным причинам.

Что мне делать, чтобы создать уникальную границу? Должен ли я генерировать случайную строку, проверить, находится ли она в содержимом файла, а если она есть, создать новую, полоскать и повторить, пока у меня не будет уникальной строки? Или достаточно "довольно случайного токена" (например, сочетание метки времени, идентификатора процесса и т.д.)?

4b9b3361

Ответ 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