webentwicklung-frage-antwort-db.com.de

Was ist der Grenzparameter in einer HTTP-Anforderung mit mehreren Teilen (POST)?

Ich versuche, ein Seitenleisten-Gadget zu entwickeln, mit dem der Prozess der Überprüfung einer Webseite auf die Entwicklung meines Übertragungskontingents automatisiert wird. Ich bin fast dran, aber es gibt noch einen letzten Schritt, um es zum Laufen zu bringen: Senden einer HttpRequest mit den korrekten POST data an eine PHP-Seite. Content-Type "des Headers sieht so aus:

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

der Parameter "Boundary" scheint zufällig zu sein, und die POSTDATA lautet wie folgt:

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

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

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

Ich verstehe nicht, wie man das POSTDATA mit dem zurückkommenden Geheimnis "Grenze" -Parameter richtig emuliert.

Würde jemand wissen, wie ich das lösen kann?

60
m6a-uds

Der Boundary-Parameter setzt sich aus einer Reihe von Bindestrichen und einer zufälligen Zeichenfolge am Ende zusammen. Sie können ihn jedoch auf einen beliebigen Wert setzen. Das Problem ist, wenn die Grenzzeichenfolge in den Anforderungsdaten angezeigt wird, wird sie als Grenze behandelt.

Für einige Tipps und eine Beispielfunktion zum Senden von mehrteiligen/Formulardaten siehe meine Antwort auf diese Frage . Es wäre nicht allzu schwierig, diese Funktion so zu ändern, dass für jeden Part, den Sie senden möchten, eine Schleife verwendet wird.

40
Andy E

Um aus dem RFC 1341, Abschnitt 7.2.1 zu zitieren, was ich für die relevanten Bits im Parameter boundary des Content-Type Header (für MIME):

Alle Untertypen von "multipart" haben eine gemeinsame Syntax ...

Das Feld Inhaltstyp für mehrteilige Entitäten erfordert einen Parameter, "Boundary", mit dem die Kapselungsgrenze angegeben wird. Die Kapselungsgrenze wird als eine Zeile definiert, die vollständig aus zwei Bindestrichen ("-", Dezimalcode 45) gefolgt vom Grenzparameterwert aus dem Headerfeld "Content-Type" besteht.

und klärt dann:

So könnte ein typisches mehrteiliges Content-Type-Header-Feld wie folgt aussehen:

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

Dies zeigt an, dass die Entität aus mehreren Teilen besteht, von denen jedes eine syntaktisch mit einer RFC 822-Nachricht identische Struktur aufweist, mit der Ausnahme, dass der Kopfbereich möglicherweise vollständig leer ist und den Teilen jeweils die Zeile --gc0p4Jq0M2Yt08jU534c0p vorangestellt ist

Dinge zu beachten:

  1. Die Kapselungsgrenze muss am Anfang einer Zeile auftreten, d. H. Nach einem CRLF (Carriage Return-Line Feed).
  2. Auf die Grenze müssen sofort entweder eine andere CRLF und die Header-Felder für den nächsten Teil oder zwei CRLFs folgen. In diesem Fall gibt es keine Header-Felder für den nächsten Teil. einfach).
  3. Kapselungsgrenzen dürfen nicht innerhalb der Kapselungen auftreten und dürfen nicht länger als 70 Zeichen sein, wobei die beiden führenden Bindestriche nicht berücksichtigt werden.

Zu guter Letzt:

Die Einkapselungsgrenze nach dem letzten Körperteil ist ein unterscheidbarer Begrenzer, der angibt, dass keine weiteren Körperteile folgen werden. Ein solches Trennzeichen ist mit den vorherigen Trennzeichen identisch, wobei am Ende der Zeile zwei weitere Bindestriche hinzugefügt werden:

 --gc0p4Jq0M2Yt08jU534c0p-- 

Ich hoffe, dass dies jemand anderem in Zukunft hilft, da ich eine Weile durchstreifen musste, bevor ich das vollständige Bild erhalten konnte (bitte lesen Sie die erforderlichen RFCs, um ein tiefgreifendes Verständnis zu erlangen).

77
nemesisfixx

Die tatsächliche Spezifikation für mehrteilige/Formulardaten ist in RFC 7578 . Die Grenze wird in Abschnitt 4.1 definiert.

6
Julian Reschke