POST标头正在发送,但未在服务器上接收

时间:2010-07-05 00:11:35

标签: php http post

在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
)

正如你所看到的,这篇文章都没有通过......

1 个答案:

答案 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标头中指定时没有前缀,只在实际使用它的后续标头中。此外,最后一个用法附加了两个新的连字符(但你已经知道了)。