Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
1

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

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

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

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

Добавлено через 47 секунд
Или может среди стандартных компонент есть что-то, чем можно нормально скачать страницу без использования всяких самоделок
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2009, 22:01
Ответы с готовыми решениями:

Проблема со скачиванием больших файлов
В последние 2-3 месяца у меня то ли с сетью, то ли с компьютером такая проблема: Когда я скачиваю...

Проблема с Http
Подскажите, в чем может быть проблема. Стоит Linux Debian5 и Domino 8.5.1 FP 5. Постоянно зависает...

Проблема С Http.
Добрый день! Имеется сервер Domino Release 8.5.3FP2HF25 на SLES 10SP3 32-bit. При запуске в...

Проблема с Http
существует клиент: unit IC1; interface uses System.SysUtils, System.Types,...

16
Эксперт С++
7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
22.10.2009, 23:42 2
В аттаче находится пример
В каком аттаче ?

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

WinInet вполне себе стандартный модуль встроенный во все Windows
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
22.10.2009, 23:43  [ТС] 3
Как обычно приаттачить забыл
Вложения
Тип файла: rar http.rar (3.1 Кб, 36 просмотров)
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
22.10.2009, 23:45  [ТС] 4
Цитата Сообщение от odip Посмотреть сообщение
Собственно все не нужно смотреть - достаточно только заголовки в ответе сервера.
Там все должно быть написано
Ну я как-то слабо понимаю, что там заголовок, а что нет. Раньше там скачивался html в виде текста (без каких-либо дополнительных заголовков)
0
Эксперт С++
7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
22.10.2009, 23:49 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> и есть заголовок.
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
23.10.2009, 00:00  [ТС] 6
Цитата Сообщение от odip Посмотреть сообщение
А ты когда пишешь такие программы изучи хотя бы основы
Если есть возможность - запусти программу, потому как пока разговор получится беспредметный

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

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

Добавлено через 1 минуту
Хм... мой пост куда-то пропал... Или я начал глючить
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
24.10.2009, 14:21  [ТС] 9
Так, попытка номер два. В приаттаченном исходнике в main меняем единичку на нолик, чтобы выбрать скачивание с одного сайта или с другого. Программа просто скачивает первый килобайт (ибо вся страница для демонстрации не нужна) и печатает на экран первые 300 байт от скачанного (этого достаточно, чтобы понять отличие в поведении программы на двух разных сайтах). На всякий пожарный прилагаю скриншоты с результатами работы (мало ли, вдруг что-то от сетевых настроек зависит и у других не будет проявляться)
Миниатюры
Проблема со скачиванием http-страницы   Проблема со скачиванием http-страницы  
Вложения
Тип файла: rar http2.rar (18.9 Кб, 27 просмотров)
0
1664 / 1133 / 80
Регистрация: 21.08.2008
Сообщений: 4,726
Записей в блоге: 1
24.10.2009, 15:09 10
вот здесь выкладывал многопоточную качалку через сокеты под винду, там есть еще и небольшой парсер заголовков ответов HTTP сервера
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
24.10.2009, 15:14  [ТС] 11
Конкретно для данных сайтов если в HttpSendRequest в качестве второго параметра подать NULL, то будет работать. А если покопаться дальше, то проблема по ходу дела в строке "Accept-Encoding:gzip, deflate". С удалением этой строки у меня начало работать всё (как GET, так и POST)

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

Добавлено через 1 минуту
P.S. Не знал, что работа с сокетами под виндой выглядит так же, как и под юниксом
0
1664 / 1133 / 80
Регистрация: 21.08.2008
Сообщений: 4,726
Записей в блоге: 1
24.10.2009, 15:44 12
раз
и
два
1
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
24.10.2009, 16:03  [ТС] 13
Спасибо конечно, но я имел в виду немного другое В общем забей. Проблему для себя я порешил, а копаться глубоко в протоколе http мне сейчас попросту не хочется, т.к. для простого скачивания страницы мне эти знания особенно ни к чему.
0
Эксперт С++
7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
25.10.2009, 14:35 14
проблема по ходу дела в строке "Accept-Encoding:gzip, deflate". С удалением этой строки у меня начало работать всё
Ну так поэтому я и спрашивал заголовки в HTTP-запросе и в HTTP-ответе
Строка "Accept-Encoding:gzip, deflate" судя по всему означает, что типа клиент (браузер) умеет принимать зазипованный контент, и сервер шлёт данные в заархивированном виде.
Правильно.
Только дополнение.
Сервер если почему-то не хочет, то все равно пошлет несжатый контент.

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

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

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

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

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

скачивать получается, а вот дальнейшая работа непредставляется возможной
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
11.07.2010, 18:56  [ТС] 17
Цитата Сообщение от Egeni Посмотреть сообщение
скачивать получается, а вот дальнейшая работа непредставляется возможной
Я же сказал тебе - создай отдельную тему. У тебя совсем другая проблема, а задав вопрос здесь, ты рискуешь тем, что сюда не зайдут те, кто эту тему уже читал и видел, что все вопросы тут закрыты
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2010, 18:56
Помогаю со студенческими работами здесь

Parser Http страницы
Здравствуйте, как распарсить http в html? Знаю что это возможно но не понимаю как. В инете находил...

Не загружаются http страницы
Всем привет. Вчера произошло непонятное без видимых причин перестали загружаться страницы,...

Проблема индексации Я (HTTP-заголовки 403)
В общем сайт пол года назад начал улетать из поиска, потом окончательно исчез. долго суппортов...

Загрузка одной страницы по http
Всем привет! Помогите пожалусто... На сайте стоит автоматический редирект с http на https. Как...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru