Какой самый простой способ получить доступ к веб-странице на C?

StackOverflow https://stackoverflow.com/questions/825327

  •  05-07-2019
  •  | 
  •  

Вопрос

Я работаю над старым школьным вариантом Linux (если быть точным, QNX), и мне нужен способ захватить веб-страницу (без файлов cookie или входа в систему, целевой URL - это просто текстовый файл), используя только сокеты и массивы.

У кого-нибудь есть фрагмент для этого?

примечание:Я не контролирую сервер, и мне очень мало с чем приходится работать, кроме того, что уже есть в коробке (добавление дополнительных библиотек на самом деле не "просто", учитывая ограничения - хотя я люблю libcurl)

Это было полезно?

Решение

У меня действительно есть некоторый код, но он также поддерживает (Открытый) SSL, поэтому размещать его здесь немного длинновато.

По сути:

  • проанализируйте URL-адрес (выделите схему URL-адресов, имя хоста, номер порта, специфичную для схемы часть

  • создайте сокет:

    s = socket(PF_INET, SOCK_STREAM, proto);

  • заполнить sockaddr_in структура с удаленным IP-адресом и портом

  • подсоедините розетку к дальнему концу:

    err = connect(s, &addr, sizeof(addr));

  • создайте строку запроса:

    n = snprinf(headers, "GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n", ...);

  • отправьте строку запроса:

    write(s, headers, n);

  • считайте данные:

    while (n = read(s, buffer, bufsize) > 0) { ... }

  • закройте розетку:

    close(s);

примечание:приведенный выше псевдокод будет собирать оба заголовка ответа и данные.Разделение между ними - это первая пустая строка.

Другие советы

Я бы посмотрел libcurl , если вам нужна поддержка SSL или что-нибудь еще.

Однако, если вы просто хотите получить простую веб-страницу из порта 80, просто откройте сокет tcp, отправьте GET /index.html HTTP / 1.0 \ n \ r \ n \ r & Quot; и проанализировать вывод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top