Какой самый простой способ получить доступ к веб-странице на C?
Вопрос
Я работаю над старым школьным вариантом 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; и проанализировать вывод.