Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
1

Скачать HTML страницу через Сокеты

31.07.2016, 20:14. Показов 1879. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Скажите пожалуйста каким образом я могу скачать себе веб-страницу через сокеты?
Я устанавливаю соединение с сервером:
C++
1
status = connect(mySocket, (struct sockaddr*)&m_addr, sizeof(m_addr));
Далее ожидаю данных:
C++
1
recv (mySocket, buff, MAXRECV, 0);
Данные с веб-страничкой не приходят, видимо потому, что сервер ждет от меня запроса на данные... Как выглядит запрос (что я должен отправить серверу, чтобы он мне прислал веб-страничку?

P.S. веб-страничка - это любой сайт. Хочу получить его HTML код.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2016, 20:14
Ответы с готовыми решениями:

Как скачать html страницу?
Здравствуйте, скачивал страницу html через "web client. downloadfile" Но там он скачивает её не...

Скачать страницу и сохранить html
Нужно скачать и просто сохранить ее в .html. Почитал немного по lxml, но все равно не понял как...

Скачать html страницу в формате txt
Делаю так. WGETом выкачиваю страницу. Получаем index.html. Дальше другой утилитой HTMLtoTXT...

Как программно скачать html-страницу?
Желательно обойтись без дополнительных библиотек, т.к. программа должна получиться компактной и...

5
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
31.07.2016, 23:06 2
Цитата Сообщение от BESSON_off Посмотреть сообщение
Данные с веб-страничкой не приходят, видимо потому, что сервер ждет от меня запроса на данные
Именно.

Цитата Сообщение от BESSON_off Посмотреть сообщение
Как выглядит запрос
Например,
Код
GET / HTTP/1.0
Host: www.cyberforum.ru
Connection: close
После этого два перевода строки. Переводы строки по стандарту должны быть виндовыми "\r\n". Это означает, что мы запрашиваем корневую страницу "/" у сервера... если на сервере несколько виртуальный серверов, то мы явно указываем, что хотим запросить именно для того, который указан в поле Host.

В общем:
C
1
2
3
char *request = "GET /cpp-linux/thread1788034.html HTTP/1.0\r\nHost: [url]www.cyberforum.ru\r\nConnection:[/url] close\r\n\r\n";
send(mySocket, request, strlen(request), 0);
recv(....);
Ну и желательно не забывать проверять возвращаемые значения от всех функций.

Добавлено через 2 минуты
Тут в строке форум зачем-то сам подставляет [url] ко всему, что похоже на ссылку... этих тегов не должно быть в программе. Это просто старый баг форума.
0
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
01.08.2016, 09:35  [ТС] 3
Почитал хабр и смастерил нужный заголовок и стартовую строку... Все сайты на HTTP отдают то что мне нужно, но как только мне нужен доступ к сайту с HTTPS - тут встречаю проблему 302.
Моя строка выглядит так:
C++
1
std::string msg = "GET / HTTP/1.1\r\nHost: ok.ru\r\n\r\n";
отправляю ее через сокет на IP 5.61.23.5.
Мне нужно получить стартовую страницу... как нужно правильно сформировать строку, чтобы сервер мне отдал страницу?
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
01.08.2016, 20:01 4
Цитата Сообщение от BESSON_off Посмотреть сообщение
но как только мне нужен доступ к сайту с HTTPS
HTTPS использует порт 433, а не 80. И там используется шифрование. Можно использовать OpenSSL для этих целей, но это потребует дополнительного изучения вопроса. Да и можно попробовать использовать сторонние библиотеки, которые позволяют обращаться к HTTP(S)-серверам... например, libcurl. Тогда вам не нужно писать свои клиенты.

Цитата Сообщение от BESSON_off Посмотреть сообщение
тут встречаю проблему 302
Означает, что страница временно находится по другому адресу... и в ответе должно присутствовать поле Location, которое и указывает этот адрес. Но подозреваю, что там будет всё тоже самое, только https вместо http. В общем, предлагаю использовать сторонние библиотеки.
1
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
02.08.2016, 10:27  [ТС] 5
Спасибо... Только слез с libcurl... хотел через сокеты делать тоже самое) видимо нужно лезть обратно(
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
03.08.2016, 21:10 6
Цитата Сообщение от BESSON_off Посмотреть сообщение
хотел через сокеты делать тоже самое) видимо нужно лезть обратно(
Можно без него сделать, но для HTTPS тогда потребуется OpenSSL использовать. А если всё равно потребуются внешние библиотеки, тогда проще не городить огород и использовать libcurl или похожие библиотеки.
0
03.08.2016, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.08.2016, 21:10
Помогаю со студенческими работами здесь

Скачать html страницу (boost.beast)
Всем доброе время суток, дали задачу реализовать crawler,скачать html страницу необходимо с помощью...

Как скачать HTML страницу целиком?
Здравствуйте! Имеется сайт, а точнее одна из его страниц, содержимое которого не отображается в...

Отправка HTML письма через сокеты
В прошлом реализовал отправку самого простого письма на E-mail Сейчас решил визуально приукрасить...

Скачать страницу через IE
Нужно получить исходник страницы, используя только стандартный IE 8-9 (Не WebBrowser, а именно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru