我正在尝试开发一个侧边栏小工具,它可以自动检查网页以确保我的转移配额的演变过程。我差不多了,但还有最后一步我需要让它工作:将带有正确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。
有人知道如何解决这个问题吗?
答案 0 :(得分:75)
引用RFC 1341, section 7.2.1,我认为是boundary
标题的Content-Type
参数(对于MIME)的相关位:
“multipart”的所有子类型都有一个共同的语法...
多部分实体的Content-Type字段需要一个参数“boundary”,用于指定封装边界。封装边界定义为一条完全由两个连字符(“ - ”,十进制代码45)组成的行,后跟来自Content-Type标题字段的边界参数值。
然后澄清:
因此,典型的multipart Content-Type标头字段可能如下所示:
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
这表明该实体由几个部分组成,每个部分本身都具有与RFC 822消息在语法上相同的结构,除了标题区域可能完全为空,并且每个部分都以行开头 --gc0p4Jq0M2Yt08jU534c0p
注意事项:
最后但并非最不重要:
最后一个身体部位后面的封装边界是一个区别分隔符,表示不会跟随其他身体部位。这样的分隔符与先前的分隔符相同,在行尾添加了两个连字符:
--gc0p4Jq0M2Yt08jU534c0p--
我希望将来可以帮助其他人,因为我必须漫游一段时间才能全面了解(请确保阅读必要的RFC以获得最深入的了解)。
答案 1 :(得分:38)
边界参数设置为多个连字符加上最后的随机字符串,但您可以将其设置为任何内容。问题是,如果边界字符串出现在请求数据中,它将被视为边界。
有关一些提示,以及发送multipart / form-data的示例函数,请参阅我对this question的回答。修改该函数以便为要发送的每个部分使用循环都不会太困难。
答案 2 :(得分:6)
multipart / form-data的实际规范在RFC 7578。边界在Section 4.1中定义。