HTTP多部分(POST)请求中的边界参数是什么?

我正在尝试开发一个侧边栏小工具,它可以自动检查我的传输配额的演变过程。 我差不多在它,但有一个最后一步,我需要得到它的工作:发送一个HttpRequest与正确的POST数据到一个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。

会有人知道我可以解决这个问题吗?

边界参数在末尾设置为连字符加上一个随机string,但您可以将其设置为任何内容。 问题是,如果边界string出现在请求数据中,它将被视为边界。

对于一些提示,以及发送multipart / form-data的示例函数,请参阅我对此问题的回答 。 修改这个函数对你想发送的每个部分使用一个循环并不难。

引用RFC 1341的第7.2.1节 ,我认为是Content-Type头(MIME)的boundary参数上的相关位:

所有“multipart”的子types都有一个共同的语法…

多部分实体的Content-Type字段需要一个参数“boundary”,用于指定封装边界。 封装边界被定义为完全由两个连字符(“ – ”,十进制码45)组成的行,后跟Content-Type头字段的边界参数值。

然后澄清:

因此,一个典型的multipart Content-Type头域可能如下所示:

  Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p 

这表示该实体由多个部分组成,每个部分本身具有与RFC 822消息在语法上相同的结构,不同的是头部区域可能完全是空的,并且每个部分都在行之前–gc0p4Jq0M2Yt08jU534c0p

注意事项:

  1. 封装边界必须出现在行的开头,即CRLF(回车换行)
  2. 边界必须立即由另一个CRLF和下一个部分的头部字段,或者由两个CRLF来完成,在这种情况下,下一部分没有头部字段(并且因此假定它是Content-Type文本/平原)。
  3. 封装边界不得出现在封装内,并且不得超过70个字符,不包括两个前导连字符。

最后但并非最不重要的:

最后一个身体部分后面的封装边界是一个明确的分隔符,表示不会有更多的身体部位随之而来。 这样的分隔符与前面的分隔符是一样的,在行尾加上两个连字符:

  --gc0p4Jq0M2Yt08jU534c0p-- 

我希望这可以帮助别人,因为我必须漫游一段时间才能得到全面的信息(请确保阅读必要的RFC以获得最深入的了解)。

multipart / form-data的实际规范在RFC 2388中 。 边界在4.1节定义。