Загрузка файлов через HTTP POST в C ++ - PullRequest
4 голосов
/ 09 июня 2009

Я пытаюсь отправить файл и другие переменные POST в скрипт PHP на моем сервере. В Google нет хороших ресурсов, и примеры кода, которые я нашел, не работают. Желательно без использования cURL.

Ответы [ 5 ]

4 голосов
/ 09 июня 2009

Если вы собираетесь накатить свой собственный, вам понадобится соответствующий RFC для загрузки HTTP-файла (поиск в Google "загрузка файла rfc http" даст тот же результат). Этот RFC также показывает, как обрабатывать смесь файлов и других FORM-данных (или переменных POST). Проблема, конечно, в том, что вы, вероятно, захотите прочитать MIME RFC ...

2 голосов
/ 09 июня 2009

Всего несколько ресурсов позволяют довольно легко накатить свой собственный

Вот пример запроса GET через ASIO (сетевая библиотека C ++ в Boost)

Вот Протокол HTTP, сделанный действительно простым

Запрос GET - это способ просмотра любой страницы вашего сайта. С этим кодом вы можете скачать любую страницу и получить ее в виде необработанного текста. Как вы можете видеть, он отправляет GET-заголовок на сервер. Как объяснено в на странице протокола HTTP , запрос POST выглядит следующим образом

POST /path/script.cgi HTTP/1.0 From:
frog@jmarshall.com User-Agent:
HTTPTool/1.0 Content-Type:
application/x-www-form-urlencoded
Content-Length: 32

home=Cosby&favorite+flavor=flies
  1. Чтобы отправить файл:
  2. Вы поставили свой URL после публикации
  3. измените тип содержимого на тип файла, который вы пытаетесь загрузить.
  4. Установить для Content-Length количество байтов в этом файле
  5. Добавить файл после возврата каретки (заменить "home = Cosby & favourite + flavour = Flys")
1 голос
/ 05 июня 2012

это отлично сработало для меня в Debian (http get, http post):

http://cpp -netlib.github.com

Я использую v 0.9.3, который требует повышения 1.49

1 голос
/ 09 июня 2009

Другое (более быстрое и грязное) решение - использовать утилиту через вызов system () или аналогичный вызов. Например, утилита wget имеет опцию --post-file.

1 голос
/ 09 июня 2009

Я бы сказал, катайся сам. Это не слишком сложно.

Захватите сообщение HTTP, отправленное из браузера в Wireshark , и при необходимости выполните обратный инжиниринг, используя spec в качестве руководства. (См. ответ Андреаса Магнуссона ниже для, возможно, более подходящих спецификаций.)

Я бы порекомендовал этот подход лично для изучения протокола, а не просто для изучения чистой спецификации. Это довольно сложно узнать вещи только из спецификации. Я предпочел бы изучить различные варианты поведения известных клиентов http и попытаться выяснить, как все работает, используя спецификацию в качестве руководства.

Отформатируйте и отправьте данные соответствующим образом через сокет, как только вы освоитесь с HTTP.

Также, если вы не знакомы с программированием сокетов, ознакомьтесь с Руководством Beej по программированию сокетов .

...