在C#中,我正在开发一个项目,用图像和其他表单数据等自动更新单独的服务器......但是,PHP服务器没有获取任何POST数据,它只获取标题我无法弄清楚原因。
以下是我发送给服务器的内容(所有新行都有CRLF):
POST /new_reply/1 HTTP/1.1
Host: 192.168.1.104
User-Agent: Update Bot
Cookie: SID=sib5m5lgaq66vfp2nfhpab6ug0;UID=bot
Content-Type: multipart/form-data; boundary=-----xxx
Content-Length: 1903
-----xxx
Content-Disposition: form-data; name="form_sent"
1
-----xxx
Content-Disposition: form-data; name="name"
-----xxx
Content-Disposition: form-data; name="body"
hej fra mig
-----xxx
Content-Disposition: form-data; name="image"; filename="test.jpg"
Content-Type: image/jpeg
(image data)
-----xxx
Content-Disposition: form-data; name="post"
Post
-----xxx--
这是带有隐藏字符的图像显示请求:
这是页面上的$ _REQUEST的PHP print_r / new_reply / 1:
Array
(
[reply] => 1
[SID] => sib5m5lgaq66vfp2nfhpab6ug0
[UID] => bot
)
正如你所看到的,这篇文章都没有通过......
答案 0 :(得分:2)
我很确定Content-Type
标头中指定的边界是错误的。它应该是这样的:
Content-Type: multipart/form-data; boundary=RANDOM_STRING_BOUNDARY
--RANDOM_STRING_BOUNDARY
Content-Disposition: form-data; name="image_name"
Monkey
--RANDOM_STRING_BOUNDARY
Content-Disposition: form-data; name="photo"; filename="monkey.png"
Content-Type: image/png
[ here would be the png file in binary form ]
--RANDOM_STRING_BOUNDARY--
正如您所看到的,RANDOM_STRING_BOUNDARY在Content-Type
标头中指定时没有前缀,只在实际使用它的后续标头中。此外,最后一个用法附加了两个新的连字符(但你已经知道了)。