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

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

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

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

P.S. веб-страничка - это любой сайт. Хочу получить его HTML код.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2016, 20:14
Ответы с готовыми решениями:

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

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

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

5
Почетный модератор
 Аватар для Humanoid
11553 / 4348 / 452
Регистрация: 12.06.2008
Сообщений: 12,453
31.07.2016, 23:06
Цитата Сообщение от BESSON_off Посмотреть сообщение
Данные с веб-страничкой не приходят, видимо потому, что сервер ждет от меня запроса на данные
Именно.

Цитата Сообщение от BESSON_off Посмотреть сообщение
Как выглядит запрос
Например,
Code
1
2
3
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
 Аватар для BESSON_off
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
01.08.2016, 09:35  [ТС]
Почитал хабр и смастерил нужный заголовок и стартовую строку... Все сайты на 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
Почетный модератор
 Аватар для Humanoid
11553 / 4348 / 452
Регистрация: 12.06.2008
Сообщений: 12,453
01.08.2016, 20:01
Цитата Сообщение от BESSON_off Посмотреть сообщение
но как только мне нужен доступ к сайту с HTTPS
HTTPS использует порт 433, а не 80. И там используется шифрование. Можно использовать OpenSSL для этих целей, но это потребует дополнительного изучения вопроса. Да и можно попробовать использовать сторонние библиотеки, которые позволяют обращаться к HTTP(S)-серверам... например, libcurl. Тогда вам не нужно писать свои клиенты.

Цитата Сообщение от BESSON_off Посмотреть сообщение
тут встречаю проблему 302
Означает, что страница временно находится по другому адресу... и в ответе должно присутствовать поле Location, которое и указывает этот адрес. Но подозреваю, что там будет всё тоже самое, только https вместо http. В общем, предлагаю использовать сторонние библиотеки.
1
 Аватар для BESSON_off
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
02.08.2016, 10:27  [ТС]
Спасибо... Только слез с libcurl... хотел через сокеты делать тоже самое) видимо нужно лезть обратно(
0
Почетный модератор
 Аватар для Humanoid
11553 / 4348 / 452
Регистрация: 12.06.2008
Сообщений: 12,453
03.08.2016, 21:10
Цитата Сообщение от BESSON_off Посмотреть сообщение
хотел через сокеты делать тоже самое) видимо нужно лезть обратно(
Можно без него сделать, но для HTTPS тогда потребуется OpenSSL использовать. А если всё равно потребуются внешние библиотеки, тогда проще не городить огород и использовать libcurl или похожие библиотеки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2016, 21:10
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru