C ++ | Winsock — Правильный способ записи HTTP Post для загрузки файла?

бдительный Я видел, что некоторые люди спрашивали, но обычно о CURL, я спрашиваю об отправке через WinSock2.

Хорошо, я знаю, как довольно легко создавать операторы POST и GET (POST с Application / application / x-www-form-urlencoded), но я не уверен, как использовать multipart / form-data, я знаю, что у него есть, чем заняться с границей, чтобы указать, когда вы закончите отправку данных.

Но как должен выглядеть базовый HTTP POST для загрузки файлов? (Также вы можете загрузить в PHP POSTBACK? Если бы это было application / x-www-form-urlencoded, я мог бы увидеть что-то вроде filename = hello.png&данные = …)

Примерно такой формат: (Это все, что я знаю об отправке данных). Я не могу найти надежный пример в Интернете, поэтому я задаю вопрос.

POST /postback.php HTTP/1.1
HOST: www.website.com
Content-Type: multipart/form-data; boundary=----IAmABoundary
Content-Length: 300

------IAmABoundary
Send Binary Data?
------IAmABoundary--

1

Решение

Используйте Fiddler для захвата загрузки файла, тогда вы сможете увидеть фактический формат, ваш пример, более или менее правильный, насколько я помню. Вот гораздо более полный ответ с хорошим примером: Пример multipart / form-data

0

Другие решения

HTTP-сообщения — это сообщения MIME. На самом деле это довольно сложный формат кодирования.

Начните с чтения RFC 2045. Это базовая спецификация для MIME.

Затем перейдите к RFC 2046. В разделе 5 RFC 2046 изложена спецификация для multipart MIME-сообщения, которые используются для multipart/form-data формат вы видите.

Это много материала, чтобы прочитать, правда. Но необходимо полностью понимать сообщения в формате MIME, чтобы иметь хоть какую-то надежду понять, как работают загрузки файлов.

0

если вы хотите отправлять содержимое файла на самом деле, вы можете просто поместить содержимое файла после заголовков HTTP и установить тип содержимого и длину содержимого

multipart / form-data используется html-формой для публикации / отправки формы, в которой есть файл в своем поле, они разделяют части / поля, используя границы из нескольких частей

0