Если вы хотите захватывать файлы с помощью HTTP, то libcURL , вероятно, является лучшим выбором для C. Однако, если вы используете это как способ изучения сетевого программирования, вам придетсяузнайте немного больше об HTTP, прежде чем вы сможете получить файл.
В текущей программе вы видите, что вам нужно отправить явный запрос на файл, прежде чем вы сможете его получить.Я бы начал с чтения RFC2616 .Не пытайтесь понять все это - это много, чтобы прочитать для этого примера.Прочтите первый раздел , чтобы понять, как работает HTTP, затем прочитайте разделы 4, 5 и 6 , чтобы понять основной формат сообщения.
ВотПример того, как выглядит HTTP-запрос для страницы вопросов stackoverflow:
GET http://stackoverflow.com/questions HTTP/1.1\r\n
Host: stackoverflow.com:80\r\n
Connection: close\r\n
Accept-Encoding: identity, *;q=0\r\n
\r\n
Я считаю, что это минимальный запрос.Я явно добавил CRLF, чтобы показать, что для завершения блока заголовка запроса используется пустая строка, как описано в RFC2616 .Если вы пропустите заголовок Accept-Encoding
, то результирующий документ, вероятно, будет передан в виде сжатого gzip-потока, поскольку HTTP позволяет это явно, если вы не укажете серверу, что он вам не нужен.
Ответ сервера также содержит заголовки HTTP для метаданных, описывающих ответ.Вот пример ответа на предыдущий запрос:
HTTP/1.1 200 OK\r\n
Server: nginx\r\n
Date: Sun, 01 Aug 2010 13:54:56 GMT\r\n
Content-Type: text/html; charset=utf-8\r\n
Connection: close\r\n
Cache-Control: private\r\n
Content-Length: 49731\r\n
\r\n
\r\n
\r\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ... 49,667 bytes follow
Этот простой пример должен дать вам представление о том, что вы собираетесь реализовать, если хотите захватывать файлы с помощью HTTP.Это лучший случай, самый простой пример.Это не то, что я бы предпринял слегка, но это, вероятно, лучший способ изучить и оценить HTTP.
Если вы ищете простой способ научиться сетевому программированию, это хороший способ начать,Я бы порекомендовал взять копию TCP / IP Illustrated, Volume 1 и UNIX Network Programming, Volume 1 .Это, вероятно, лучший способ научиться писать сетевые приложения.Я бы, вероятно, начал с написания FTP-клиента , поскольку FTP - гораздо более простой протокол для начала.
Если вы пытаетесь узнать подробности, связанные с HTTP,затем:
- Купить HTTP: полное руководство и читать
- Читать RFC2616 до тех пор, пока вы его не поймете
- Попробуйте примеры с использованием
telnet server 80
и вводом запросов вручную - Загрузите клиент cURL и используйте параметры командной строки
--verbose
и --include
, чтобы вы могли видеть, что происходит
- Прочитайте диссертацию Филдинга до тех пор, пока HTTP действительно не будет иметь смысла.
Только не планируйте писать свой собственный HTTP-клиент для корпоративного использования .Вы не хотите этого делать, поверьте мне, как тому, кто уже некоторое время допускает такую ошибку ...