Какой самый простой способ получить веб-страницу в C? - PullRequest
2 голосов
/ 05 мая 2009

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

Кто-нибудь получил фрагмент для этого?

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

Ответы [ 2 ]

9 голосов
/ 05 мая 2009

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

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

8 голосов
/ 05 мая 2009

У меня есть некоторый код, но он также поддерживает (открытый) 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);

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

...