В 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--
Вот изображение с демонстрацией скрытых символов запроса:
Вот PHP print_r $ _REQUEST на странице/new_reply/1:
Array
(
[reply] => 1
[SID] => sib5m5lgaq66vfp2nfhpab6ug0
[UID] => bot
)
Как Вы видите, ни одно из сообщения не проникает...
Я почти уверен, что граница, указанная в заголовке 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
, только в последующих заголовках, где он фактически используется. Кроме того, последнее использование добавляет два новых дефиса (но вы это уже знали).