HTTP 多部分 (POST) 请求中的边界参数是啥?
Posted
技术标签:
【中文标题】HTTP 多部分 (POST) 请求中的边界参数是啥?【英文标题】:What is the boundary parameter in an HTTP multi-part (POST) Request?HTTP 多部分 (POST) 请求中的边界参数是什么? 【发布时间】:2011-01-19 07:10:20 【问题描述】:我正在尝试开发一个侧边栏小工具,它可以自动检查网页以了解我的传输配额的演变。我快到了,但我需要最后一步才能让它工作:将带有正确 POST 数据的 HttpRequest 发送到 php 页面。使用 firefox 插件,标题的“Content-Type”如下所示:
Content-Type=multipart/form-data; boundary=---------------------------99614912995
参数“boundary”似乎是随机的,POSTDATA 是这样的:
POSTDATA =-----------------------------99614912995
Content-Disposition: form-data; name="SOMENAME"
Formulaire de Quota
-----------------------------99614912995
Content-Disposition: form-data; name="OTHERNAME"
SOMEDATA
-----------------------------99614912995--
我不明白如何正确模拟带有神秘“边界”参数的 POSTDATA。
有人知道我该如何解决这个问题吗?
【问题讨论】:
您找到解决方案了吗?如何使用 curl 发送 SOMENAME、OTHERNAME 等字段? 我遇到类似问题的经验列在[这里][1] [1]:***.com/questions/31774695/… 【参考方案1】:引用RFC 1341, section 7.2.1,我认为是Content-Type
标头(用于MIME)的boundary
参数上的相关位:
“multipart”的所有子类型共享一个共同的语法...
多部分实体的 Content-Type 字段需要一个参数“boundary”,用于指定封装边界。封装边界定义为一行完全由两个连字符(“-”,十进制代码 45)组成,后跟 Content-Type 标头字段中的边界参数值。
然后澄清:
因此,典型的多部分 Content-Type 标头字段可能如下所示:
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
这表明实体由几个部分组成,每个部分本身的结构在语法上与 RFC 822 消息相同,除了标题区域可能完全为空,并且每个部分前面都有一行 --gc0p4Jq0M2Yt08jU534c0p
注意事项:
-
封装边界必须出现在行首,即在 CRLF(回车换行)之后
边界必须紧跟另一个 CRLF 和下一部分的标头字段,或两个 CRLF,在这种情况下,下一部分没有标头字段(因此假定为 Content-输入文本/纯文本)。
封装边界不得出现在封装内,且不得超过 70 个字符,不包括两个前导连字符。
最后但并非最不重要的一点:
最后一个正文部分之后的封装边界是一个可区分的分隔符,表示后面不会有其他正文部分。这样的分隔符与前面的分隔符相同,只是在行尾添加了两个连字符:
--gc0p4Jq0M2Yt08jU534c0p--
我希望这对将来的其他人有所帮助,因为我必须漫游一段时间才能了解全貌(请确保阅读必要的 RFC 以获得最深入的了解)。
【讨论】:
注意:当边界改变时,Content-Length应该改变 我认为边界是用来分隔不同部分的,不表示长度。【参考方案2】:边界参数设置为多个连字符加上末尾的随机字符串,但您可以将其设置为任何值。问题是,如果边界字符串出现在请求数据中,它将被视为边界。
有关一些提示和发送 multipart/form-data 的示例函数,请参阅我对 this question 的回答。修改该函数以对您要发送的每个部分使用循环并不难。
【讨论】:
谢谢!这帮助我更接近我的目标!还没有工作,但这澄清了;-) 注意:当边界改变时,Content-Length应该改变【参考方案3】:multipart/form-data 的实际规范在RFC 7578 中。边界在Section 4.1中定义。
【讨论】:
以上是关于HTTP 多部分 (POST) 请求中的边界参数是啥?的主要内容,如果未能解决你的问题,请参考以下文章
警告:第 0 行未知中的多部分/表单数据 POST 数据中缺少边界