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?
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.
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:
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).
Die tatsächliche Spezifikation für mehrteilige/Formulardaten ist in RFC 7578 . Die Grenze wird in Abschnitt 4.1 definiert.