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

m6a*_*uds 62 http multipartform-data xmlhttprequest mime-types

我正在尝试开发一个侧边栏小工具,它可以自动检查网页以确保我的转移配额的演变过程.我差不多了,但还有最后一步我需要让它工作:将带有正确POST数据的HttpRequest发送到php页面.使用firefox插件,标题的"Content-Type"如下所示:

Content-Type=multipart/form-data; boundary=---------------------------99614912995
Run Code Online (Sandbox Code Playgroud)

参数"boundary"似乎是随机的,POSTDATA是这样的:

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

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

SOMEDATA
-----------------------------99614912995--
Run Code Online (Sandbox Code Playgroud)

我不明白如何正确模拟POSTDATA与神秘的"边界"参数回来.

有人知道我怎么能解决这个问题吗?

nem*_*ixx 78

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

"multipart"的所有子类型都有一个共同的语法......

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

然后澄清:

因此,典型的multipart Content-Type头字段可能如下所示:

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
Run Code Online (Sandbox Code Playgroud)

这表明该实体由几个部分组成,每个部分本身都具有与RFC 822消息在语法上相同的结构,除了标题区域可能完全为空,并且每个部分都以行开头--gc0p4Jq0M2Yt08jU534c0p

注意事项:

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

最后但并非最不重要的:

最后一个身体部位后面的封装边界是一个区别分隔符,表示不会跟随其他身体部位.这样的分隔符与先前的分隔符相同,在行的末尾添加了两个连字符:

 --gc0p4Jq0M2Yt08jU534c0p-- 
Run Code Online (Sandbox Code Playgroud)

我希望这对未来的其他人有所帮助,因为我必须漫游一段时间才能全面了解(请确保阅读必要的RFC以获得最深刻的理解).

  • 注意:当边界发生变化时,应改变Content-Length (2认同)

And*_*y E 41

边界参数设置为多个连字符加上最后的随机字符串,但您可以将其设置为任何内容.问题是,如果边界字符串显示在请求数据中,它将被视为边界.

有关一些提示,以及发送multipart/form-data的示例函数,请参阅我对此问题的回答.修改该函数以便为要发送的每个部分使用循环都不会太困难.

  • 注意:当边界发生变化时,应改变Content-Length (3认同)

Jul*_*hke 6

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