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
注意事项:
- 封装边界必须出现在行的开头,即CRLF(回车换行)
- 边界必须立即由另一个CRLF和下一个部分的头部字段,或者由两个CRLF来完成,在这种情况下,下一部分没有头部字段(并且因此假定它是Content-Type文本/平原)。
- 封装边界不得出现在封装内,并且不得超过70个字符,不包括两个前导连字符。
最后但并非最不重要的:
最后一个身体部分后面的封装边界是一个明确的分隔符,表示不会有更多的身体部位随之而来。 这样的分隔符与前面的分隔符是一样的,在行尾加上两个连字符:
--gc0p4Jq0M2Yt08jU534c0p--
我希望这可以帮助别人,因为我必须漫游一段时间才能得到全面的信息(请确保阅读必要的RFC以获得最深入的了解)。
multipart / form-data的实际规范在RFC 2388中 。 边界在4.1节定义。