Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
#1

Проблема со скачиванием http-страницы - C++

22.10.2009, 22:01. Просмотров 1790. Ответов 16
Метки нет (Все метки)

Возможно, что вопрос не к программистам, а к тем, кто разбирается в протоколе http, но для начала попробую здесь

Когда-то я нашёл статью о том, как программно скачивать страницы - http://www.rsdn.ru/article/inet/wininet.xml Это дело вполне приемлимо работает. Но сейчас столкнулся с тем, что с некоторых страниц вместо текстовой инфы скачивается какой-то бинарный контент. В аттаче находится пример. Если это важно, то компилял на Borland-2007. Если оставить исходник как есть, то скачиваться будет с http://www.mipt.ru и всё хорошо. Если в начале кода закомментировать два макроса URL и DOC и открыть макросы пониже, то будет открываться http://www.mipt.ru/konkurs - и пойдёт нетекстовая хрень

Добавлено через 47 секунд
Или может среди стандартных компонент есть что-то, чем можно нормально скачать страницу без использования всяких самоделок
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2009, 22:01     Проблема со скачиванием http-страницы
Посмотрите здесь:

Сохранение текста со страницы путем http - C++
Вообщем. Есть страница в интернете, где содержится строк 20-25 текста, в виде xml. Мне надо весь текст скопировать, и сохранить в...

Сохранение исходного кода страницы путем http - C++
Сразу к коду : if (hInternet != NULL) { // открываем HTTP сессию HINTERNET hConnect = ...

HTTP: скорость загрузки сайта, размер веб-страницы, количество файлов - C++ Builder
здраствуйте, у меня возникло ряд вопросов: буду делать дипломную работу, для етого думаю написать програму, кторая сможет следуючее: 1....

Проблемка с скачиванием не маленьких файлов в цикле - C++
Всем привет) Пишу софтину на с++, вкратце, что она делает: 1) Берет из файла links.txt ссылки, на которые нужно перейти. 2) Берет из...

HTTP сервер - C++ Builder
Почему не находит 1.html? Ця веб-сторінка недоступна. Веб-сторінка за адресою http://localhost/C:/1.html може бути тимчасово...

Winsock+HTTP - C++ WinAPI
Доброго времени суток всем. Возник вопрос относительно передачи гипертекста (HTTP) по сокетам TCP. В общем то даже неудобно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
22.10.2009, 23:42     Проблема со скачиванием http-страницы #2
В аттаче находится пример
В каком аттаче ?

Собственно все не нужно смотреть - достаточно только заголовки в ответе сервера.
Там все должно быть написано.

WinInet вполне себе стандартный модуль встроенный во все Windows
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
22.10.2009, 23:43  [ТС]     Проблема со скачиванием http-страницы #3
Как обычно приаттачить забыл
Вложения
Тип файла: rar http.rar (3.1 Кб, 35 просмотров)
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
22.10.2009, 23:45  [ТС]     Проблема со скачиванием http-страницы #4
Цитата Сообщение от odip Посмотреть сообщение
Собственно все не нужно смотреть - достаточно только заголовки в ответе сервера.
Там все должно быть написано
Ну я как-то слабо понимаю, что там заголовок, а что нет. Раньше там скачивался html в виде текста (без каких-либо дополнительных заголовков)
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
22.10.2009, 23:49     Проблема со скачиванием http-страницы #5
Смотрим твой сайт:
Код
odip@cavalry-7i$ wget -S -O 1.html "http://www.mipt.ru/konkurs"
--2009-10-23 02:44:35--  http://www.mipt.ru/konkurs
Распознаётся www.mipt.ru... 193.125.143.57
Устанавливается соединение с www.mipt.ru|193.125.143.57|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ...
  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Set-Cookie: JSESSIONID=7D237537D4270E74198E260DC1F045CC; Path=/
  Date: Thu, 22 Oct 2009 19:44:41 GMT
  Last-Modified: Mon, 07 Sep 2009 08:56:05 GMT
  Expires: Thu, 22 Oct 2009 20:44:42 GMT
  Content-Type: text/html;charset=Windows-1251
  Content-Length: 23426
  Connection: keep-alive
Длина: 23426 (23K) [text/html]
Сохраняется в каталог: `1.html'.

100%[======================================>] 23 426       102K/s   в 0,2s

2009-10-23 02:44:37 (102 KB/s) - `1.html' сохранён [23426/23426]
Ничего там нет - кодировка Windows 1251 и все.

Добавлено через 3 минуты
Ну я как-то слабо понимаю, что там заголовок, а что нет. Раньше там скачивался html в виде текста (без каких-либо дополнительных заголовков)
А ты когда пишешь такие программы изучи хотя бы основы.

Коротко говоря запрос к http-серверу выглядит так:
Код
GET /dddddd HTTP/1.1
field1: content1
field2: content1
<CR><LF>
жирное тело запроса, но может быть пустое
Ответ выглядит так же:
Код
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
field1: content1
field2: content2
<CR><LF>
жирное тело ответа
Вот все что до пустой строки <CR><LF> и есть заголовок.
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
23.10.2009, 00:00  [ТС]     Проблема со скачиванием http-страницы #6
Цитата Сообщение от odip Посмотреть сообщение
А ты когда пишешь такие программы изучи хотя бы основы
Если есть возможность - запусти программу, потому как пока разговор получится беспредметный

Добавлено через 6 минут
Хм... теперь и у меня в этом коротком примере работает как надо, хотя два часа назад было совсем всё плохо. Вся это байда про заголовки - это не то, ибо у меня НЕ текст считывался. При этом в основной программе по прежнему косячит. Попробую вырезать фрагмент из программы
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
23.10.2009, 00:07     Проблема со скачиванием http-страницы #7
Собрал в Visual Studio, сделав пару незначимых исправлений.
Скачивает нормальную страницу в 44496 байта.
И ?

Добавлено через 3 минуты
Заголовки - важная часть работы протокола HTTP.
В твоей программа правда не видно заголовков - только тело ответа.
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
23.10.2009, 00:26  [ТС]     Проблема со скачиванием http-страницы #8
Ладно, не буду тебя мурыжить. Просто с тем укороченным исходником, что в аттаче, для меня наличие косяка было очевидным. Почему он на этом исходнике пропал - не понятно, все проверки вроде бы там корректно выставлены.Попробую вырезать уже из сложного варианта

Добавлено через 1 минуту
Хм... мой пост куда-то пропал... Или я начал глючить
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
24.10.2009, 14:21  [ТС]     Проблема со скачиванием http-страницы #9
Так, попытка номер два. В приаттаченном исходнике в main меняем единичку на нолик, чтобы выбрать скачивание с одного сайта или с другого. Программа просто скачивает первый килобайт (ибо вся страница для демонстрации не нужна) и печатает на экран первые 300 байт от скачанного (этого достаточно, чтобы понять отличие в поведении программы на двух разных сайтах). На всякий пожарный прилагаю скриншоты с результатами работы (мало ли, вдруг что-то от сетевых настроек зависит и у других не будет проявляться)
Миниатюры
Проблема со скачиванием http-страницы   Проблема со скачиванием http-страницы  
Вложения
Тип файла: rar http2.rar (18.9 Кб, 26 просмотров)
oxotnik
1589 / 1066 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
24.10.2009, 15:09     Проблема со скачиванием http-страницы #10
вот здесь выкладывал многопоточную качалку через сокеты под винду, там есть еще и небольшой парсер заголовков ответов HTTP сервера
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
24.10.2009, 15:14  [ТС]     Проблема со скачиванием http-страницы #11
Конкретно для данных сайтов если в HttpSendRequest в качестве второго параметра подать NULL, то будет работать. А если покопаться дальше, то проблема по ходу дела в строке "Accept-Encoding:gzip, deflate". С удалением этой строки у меня начало работать всё (как GET, так и POST)

Добавлено через 3 минуты
Цитата Сообщение от oxotnik Посмотреть сообщение
вот здесь выкладывал многопоточную качалку через сокеты под винду, там есть еще и небольшой парсер заголовков ответов HTTP сервера
Без комментариев и ссылок на документацию это не особо интересено. Строка "Accept-Encoding:gzip, deflate" судя по всему означает, что типа клиент (браузер) умеет принимать зазипованный контент, и сервер шлёт данные в заархивированном виде. Набор байтов на втором скриншоте - скорее всего и есть зазипованная страница

Добавлено через 1 минуту
P.S. Не знал, что работа с сокетами под виндой выглядит так же, как и под юниксом
oxotnik
1589 / 1066 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
24.10.2009, 15:44     Проблема со скачиванием http-страницы #12
раз
и
два
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
24.10.2009, 16:03  [ТС]     Проблема со скачиванием http-страницы #13
Спасибо конечно, но я имел в виду немного другое В общем забей. Проблему для себя я порешил, а копаться глубоко в протоколе http мне сейчас попросту не хочется, т.к. для простого скачивания страницы мне эти знания особенно ни к чему.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.10.2009, 14:35     Проблема со скачиванием http-страницы #14
проблема по ходу дела в строке "Accept-Encoding:gzip, deflate". С удалением этой строки у меня начало работать всё
Ну так поэтому я и спрашивал заголовки в HTTP-запросе и в HTTP-ответе
Строка "Accept-Encoding:gzip, deflate" судя по всему означает, что типа клиент (браузер) умеет принимать зазипованный контент, и сервер шлёт данные в заархивированном виде.
Правильно.
Только дополнение.
Сервер если почему-то не хочет, то все равно пошлет несжатый контент.

Причем в ответе обязательно будет указано каким способом сделано сжатие.
Потому что gzip и deflate - это два разных метода.
Стандартный метод сжатия в zip-архивах кстати - это deflate.

т.к. для простого скачивания страницы мне эти знания особенно ни к чему.
Ты просто не указывай что можешь принимать сжатый контент и все
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
25.10.2009, 15:05  [ТС]     Проблема со скачиванием http-страницы #15
Цитата Сообщение от odip Посмотреть сообщение
Ну так поэтому я и спрашивал заголовки в HTTP-запросе и в HTTP-ответе
Если бы я ещё и знал, что из всего этого барахла правильно называется этим термином... Я по сути дела скачал готовый компонент с сайта и описание его интерфейса и им пользовался. Только вот автор про сжатие почему-то ничего не упомянул, не исключаю, что даже и не знал. Когда всё это написано в виде класса с универсальным интерфейсом, то логика работы всего этого барахла видна очень плохо. Когда я всё это из класса переделал в линейную последовательность вызовов - логика сразу стала ясна, а так же стали понятны места, где можно экспериментировать методом тыка (собственно, методом тыка и нашёл ответ на вопрос)

Цитата Сообщение от odip Посмотреть сообщение
Сервер если почему-то не хочет, то все равно пошлет несжатый контент.
Либо не может или не настроен должным образом

Цитата Сообщение от odip Посмотреть сообщение
Причем в ответе обязательно будет указано каким способом сделано сжатие.
Данный набор интерфейсов прячет заголовки ответа от пользователя и выдаёт только контент

Цитата Сообщение от odip Посмотреть сообщение
Ты просто не указывай что можешь принимать сжатый контент и все
Да я уже написал, что так и сделал. До такого, слава яйцам, пока ещё в состоянии додуматься самостоятельно Да и тех моих скромных знаний в вопросе http-протоколов (по крайней мере ручками по Telnet'у могу скачать страницу) хватало, чтобы понять, что что-то не так с ответом сервера, потому и размышлял на предмет того, к программистам обращаться по этому вопросу или к тем, кто web'ом занимается. Пример сокращал только для чистоты эксперимента, чтобы на 100% быть уверенным, что где-то по пути не затесался мой косяк (мало ли где-то некорректно работаю с указателями и т.п.), т.к. уверенности в этом было только 99.99%
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
11.07.2010, 18:54     Проблема со скачиванием http-страницы #16
продолжаем тему про WinInet использовал код что выше - неполучается работать с этим текстом
скачать несколько страниц, убрать из них рекламу, javascript и сложить в out-файл

скачивать получается, а вот дальнейшая работа непредставляется возможной
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2010, 18:56     Проблема со скачиванием http-страницы
Еще ссылки по теме:

HTTP Library - C++ Builder
Здравствуйте, посоветуйте, пожалуйста библиотеку для работы с HTTP протоколом. Нужно чтобы был простой доступ к Headers и Cookies. ...

HTTP GET запрос - C++
Здравствуйте. Уважаемые форумчане,помогите пожалуйста составить запрос серверу для получения цитаты с небезызвестного сайта bash.im...

http-сниффер - C++ Linux
Джентельмены! Подскажите, пожалуйста с чего начать. Любой соурс по теме очень нужен. В конечном счёте нужно получить программу,...

Http-сниффер - C++
У меня есть сниффер (за основу я взяла этот: http://habrahabr.ru/post/164901/). Он ловит все пакеты. Как сделать так, чтобы остались только...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,891
Записей в блоге: 26
11.07.2010, 18:56  [ТС]     Проблема со скачиванием http-страницы #17
Цитата Сообщение от Egeni Посмотреть сообщение
скачивать получается, а вот дальнейшая работа непредставляется возможной
Я же сказал тебе - создай отдельную тему. У тебя совсем другая проблема, а задав вопрос здесь, ты рискуешь тем, что сюда не зайдут те, кто эту тему уже читал и видел, что все вопросы тут закрыты
Yandex
Объявления
11.07.2010, 18:56     Проблема со скачиванием http-страницы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru