Jaki jest parametr boundary w wieloczęściowym żądaniu HTTP (POST)?

Próbuję opracować gadżet paska bocznego, który automatyzuje proces sprawdzania strony internetowej pod kątem ewolucji mojego limitu transferu. Jestem prawie na to, ale jest jeszcze jeden krok, który muszę zrobić, aby to działało: wysłanie HttpRequest z poprawnymi danymi postu na stronę php. Używając wtyczki do Firefoksa, oto jak wygląda "Content-Type" nagłówka:

Content-Type=multipart/form-data; boundary=---------------------------99614912995

Z parametrem "boundary" wydaje się być losowe, a POSTDATA jest następująca:

POSTDATA =-----------------------------99614912995
Content-Disposition: form-data; name="SOMENAME"

Formulaire de Quota
-----------------------------99614912995
Content-Disposition: form-data; name="OTHERNAME"

SOMEDATA
-----------------------------99614912995--

Nie rozumiem jak poprawnie Emuluj POSTDATA z powracającym tajemniczym parametrem "boundary".

Czy ktoś wie, jak Mogę to rozwiązać?
Author: nemesisfixx, 2010-02-21

3 answers

Parametr boundary jest ustawiony na liczbę myślników plus losowy ciąg na końcu, ale można go ustawić na cokolwiek. Problem polega na tym, że jeśli łańcuch boundary pojawi się w danych żądania, będzie traktowany jako granica.

Po kilka porad i przykładową funkcję wysyłania multipart/form-data zobacz moją odpowiedź na to pytanie . Nie byłoby zbyt trudno zmodyfikować tę funkcję, aby używać pętli dla każdej części, którą chcesz wysłać.

 36
Author: Andy E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:05

Cytuję z RFC 1341, sekcja 7.2.1, co uważam za odpowiednie bity w parametrze boundary nagłówka Content-Type (dla MIME):

Wszystkie podtypy "multipart" mają wspólną składnię ...

Pole Content-Type dla jednostek wieloczęściowych wymaga jednego parametru, "boundary", który jest używany do określenia granicy enkapsulacji. Granica enkapsulacji definiowana jest jako linia składająca się w całości z dwóch myślników ( " - " , kod dziesiętny 45) po którym następuje wartość parametru boundary z pola Content-Type header.

A następnie objaśnia:

Tak więc typowe pole nagłówka typu wieloczęściowego może wyglądać tak:

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

Oznacza to, że encja składa się z kilku części, z których każda ma strukturę składniowo identyczną z Komunikatem RFC 822, z wyjątkiem tego, że obszar nagłówka może być całkowicie pusty i że wszystkie części są poprzedzone linią --gc0p4Jq0M2Yt08jU534c0p

Rzeczy do zapamiętania:

    Na początku linii musi znajdować się granica hermetyzacji, tj. po CRLF (carriage Return-Line Feed)
  1. granica musi być natychmiast następująca albo przez inny CRLF i pola nagłówka dla następnej części, albo przez dwa CRLF, w którym to przypadku nie ma pól nagłówka dla następnej części (i dlatego zakłada się, że jest to Content-Type text/plain).
  2. granice enkapsulacji nie mogą pojawiają się w hermetyzacjach i nie mogą być dłuższe niż 70 znaków, nie licząc dwóch głównych myślników.

Last but not least:

Granica enkapsulacji po ostatniej części ciała jest oddzielnym ogranicznikiem, który wskazuje, że dalsze części ciała nie będą podążać. Taki ogranicznik jest identyczny z poprzednimi ogranicznikami, z dodaniem dwóch kolejnych myślników na końcu linii:

 --gc0p4Jq0M2Yt08jU534c0p-- 

Mam nadzieję, że to pomoże komuś innemu w przyszłość, ponieważ musiałem wędrować przez chwilę przed uzyskaniem pełnego obrazu (proszę upewnić się, aby przeczytać niezbędne RFC, aby uzyskać najgłębsze zrozumienie).

 71
Author: nemesisfixx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-07 13:12:28

Aktualna specyfikacja dla multipart / form-data znajduje się w RFC 7578 . Granica jest zdefiniowana w Sekcja 4.1 .

 5
Author: Julian Reschke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 19:03:52