web-dev-qa-db-ja.com

HTTPマルチパート(POST)リクエストの境界パラメーターとは何ですか?

私は、転送割り当ての進化についてWebページをチェックするプロセスを自動化するサイドバーガジェットを開発しようとしています。私はほとんどそれに取り組んでいますが、それを機能させるために必要な最後のステップが1つあります。正しいPOSTデータを含むHttpRequestをphpページに送信します。Firefoxプラグインを使用して、ヘッダーのContent-Type」は次のようになります。

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

パラメータ「境界」はランダムに見えるようになっており、POSTDATAは次のとおりです。

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

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

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

ミステリー「境界」パラメーターが返されてPOSTDATAを正しくエミュレートする方法がわかりません。

誰かが私がこれを解決する方法を知っていますか?

60
m6a-uds

境界パラメータは、ハイフンの数と最後にランダムな文字列を設定しますが、何でも設定できます。問題は、境界文字列が要求データに現れると、境界として扱われることです。

いくつかのヒント、およびmultipart/form-dataを送信するためのサンプル関数については、 この質問 への私の答えを参照してください。送信したい部分ごとにループを使用するようにその関数を変更することはそれほど難しくありません。

40
Andy E

RFC 1341、セクション7.2.1 から引用するには、Content-Typeヘッダーのboundaryパラメーターの関連ビットと考えられるもの(MIMEの場合):

「マルチパート」のすべてのサブタイプは、共通の構文を共有しています...

マルチパートエンティティのContent-Typeフィールドには、カプセル化境界を指定するために使用される1つのパラメーター "boundary"が必要です。カプセル化境界は、2つのハイフン文字(「-」、10進コード45)の後に、Content-Typeヘッダーフィールドの境界パラメーター値が続く行として定義されます。

そして、明確にします:

したがって、一般的なマルチパートContent-Typeヘッダーフィールドは次のようになります。

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

これは、エンティティがいくつかの部分で構成されており、それぞれがRFC 822メッセージと構文的に同一の構造を持っていることを示しています。ただし、ヘッダー領域は完全に空である場合があり、各部分の先頭には--gc0p4Jq0M2Yt08jU534c0pという行があります

注意事項:

  1. カプセル化の境界は、行の先頭、つまりCRLF(キャリッジリターンラインフィード)の後に発生する必要があります
  2. 境界の直後には、別のCRLFと次の部分のヘッダーフィールド、または2つのCRLFが続く必要があります。この場合、次の部分のヘッダーフィールドはありません(したがって、Content-Type text /プレーン)。
  3. カプセル化の境界はカプセル化内に表示されてはならず、70文字以下である必要があります。2つの先頭のハイフンはカウントされません。

少なくとも最後のではなく:

最後の身体部分に続くカプセル化境界は、それ以上身体部分が続かないことを示す顕著な区切り文字です。このような区切り記号は、行の最後にさらに2つのハイフンが追加されている点を除いて、前の区切り記号と同じです。

 --gc0p4Jq0M2Yt08jU534c0p-- 

全体像を把握する前にしばらく歩き回らなければならなかったので、これが将来誰かに役立つことを願っています(必要なRFCを読んで理解を深めてください)。

77
nemesisfixx

Multipart/form-dataの実際の仕様は RFC 7578 にあります。境界は セクション4.1 で定義されています。

6
Julian Reschke