![]() ![]() |
|
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
|
|
22.10.2009, 22:01 | |
Ответы с готовыми решениями:
16
Проблема со скачиванием больших файлов Проблема с Http Проблема С Http. Проблема с Http |
![]() 7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
22.10.2009, 23:42 | 2 |
Собственно все не нужно смотреть - достаточно только заголовки в ответе сервера. Там все должно быть написано. WinInet вполне себе стандартный модуль встроенный во все Windows ![]()
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] Добавлено через 3 минуты Коротко говоря запрос к 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> жирное тело ответа
0
|
![]() ![]() |
|
23.10.2009, 00:00 [ТС] | 6 |
Если есть возможность - запусти программу, потому как пока разговор получится беспредметный
Добавлено через 6 минут Хм... теперь и у меня в этом коротком примере работает как надо, хотя два часа назад было совсем всё плохо. Вся это байда про заголовки - это не то, ибо у меня НЕ текст считывался. При этом в основной программе по прежнему косячит. Попробую вырезать фрагмент из программы
0
|
![]() 7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
23.10.2009, 00:07 | 7 |
Собрал в Visual Studio, сделав пару незначимых исправлений.
Скачивает нормальную страницу в 44496 байта. И ? Добавлено через 3 минуты Заголовки - важная часть работы протокола HTTP. В твоей программа правда не видно заголовков - только тело ответа.
0
|
![]() ![]() |
|
23.10.2009, 00:26 [ТС] | 8 |
Ладно, не буду тебя мурыжить. Просто с тем укороченным исходником, что в аттаче, для меня наличие косяка было очевидным. Почему он на этом исходнике пропал - не понятно, все проверки вроде бы там корректно выставлены.Попробую вырезать уже из сложного варианта
Добавлено через 1 минуту Хм... мой пост куда-то пропал... Или я начал глючить
0
|
![]() ![]() |
|
24.10.2009, 14:21 [ТС] | 9 |
Так, попытка номер два. В приаттаченном исходнике в main меняем единичку на нолик, чтобы выбрать скачивание с одного сайта или с другого. Программа просто скачивает первый килобайт (ибо вся страница для демонстрации не нужна) и печатает на экран первые 300 байт от скачанного (этого достаточно, чтобы понять отличие в поведении программы на двух разных сайтах). На всякий пожарный прилагаю скриншоты с результатами работы (мало ли, вдруг что-то от сетевых настроек зависит и у других не будет проявляться)
0
|
![]() ![]() |
|
24.10.2009, 15:14 [ТС] | 11 |
Конкретно для данных сайтов если в HttpSendRequest в качестве второго параметра подать NULL, то будет работать. А если покопаться дальше, то проблема по ходу дела в строке "Accept-Encoding:gzip, deflate". С удалением этой строки у меня начало работать всё (как GET, так и POST)
Добавлено через 3 минуты Без комментариев и ссылок на документацию это не особо интересено. Строка "Accept-Encoding:gzip, deflate" судя по всему означает, что типа клиент (браузер) умеет принимать зазипованный контент, и сервер шлёт данные в заархивированном виде. Набор байтов на втором скриншоте - скорее всего и есть зазипованная страница Добавлено через 1 минуту P.S. Не знал, что работа с сокетами под виндой выглядит так же, как и под юниксом
0
|
![]() ![]() |
|
24.10.2009, 16:03 [ТС] | 13 |
Спасибо конечно, но я имел в виду немного другое
![]()
0
|
![]() 7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
25.10.2009, 14:35 | 14 |
![]() Только дополнение. Сервер если почему-то не хочет, то все равно пошлет несжатый контент. Причем в ответе обязательно будет указано каким способом сделано сжатие. Потому что gzip и deflate - это два разных метода. Стандартный метод сжатия в zip-архивах кстати - это deflate. ![]()
0
|
![]() ![]() |
|
25.10.2009, 15:05 [ТС] | 15 |
Если бы я ещё и знал, что из всего этого барахла правильно называется этим термином... Я по сути дела скачал готовый компонент с сайта и описание его интерфейса и им пользовался. Только вот автор про сжатие почему-то ничего не упомянул, не исключаю, что даже и не знал. Когда всё это написано в виде класса с универсальным интерфейсом, то логика работы всего этого барахла видна очень плохо. Когда я всё это из класса переделал в линейную последовательность вызовов - логика сразу стала ясна, а так же стали понятны места, где можно экспериментировать методом тыка (собственно, методом тыка и нашёл ответ на вопрос)
Либо не может или не настроен должным образом ![]() Данный набор интерфейсов прячет заголовки ответа от пользователя и выдаёт только контент Да я уже написал, что так и сделал. До такого, слава яйцам, пока ещё в состоянии додуматься самостоятельно ![]()
0
|
11.07.2010, 18:54 | 16 |
продолжаем тему про WinInet использовал код что выше - неполучается работать с этим текстом
скачать несколько страниц, убрать из них рекламу, javascript и сложить в out-файл скачивать получается, а вот дальнейшая работа непредставляется возможной
0
|
![]() ![]() |
|
11.07.2010, 18:56 [ТС] | 17 |
Я же сказал тебе - создай отдельную тему. У тебя совсем другая проблема, а задав вопрос здесь, ты рискуешь тем, что сюда не зайдут те, кто эту тему уже читал и видел, что все вопросы тут закрыты
0
|
11.07.2010, 18:56 | |
Помогаю со студенческими работами здесь
17
Parser Http страницы Не загружаются http страницы Проблема индексации Я (HTTP-заголовки 403) Загрузка одной страницы по http Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |