| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Еще про скачивание из интернета |
| Автор: Эд 20.6.2005, 11:24 |
| Мне понадобилось сделать себе инструмент-"гляделку" в Нете, и я использовал способ скачивания, указанный вот здесь http://forum.vingrad.ru/index.php?showtopic=30379 Спасибо большое -Mikle- ! Дополнительный вопрос: какова функция "обновления страницы"? А то после первой скачки, последующие разы берутся из кэша, невзирая на изменившееся состояние сайта. Как принудительно обновить кэш, используя VB? |
| Автор: Voldemar2004 4.7.2005, 18:35 | ||
|
| Автор: Voldemar2004 4.7.2005, 19:02 | ||||||||
| Короче если по-нормальному, то: проверяешь, отличается ли предыдущая страница от текущей, Если Да, То Стираешь Кэш, пишешь в него то, что тебе надо, Иначе Оставляешь Кэш в покое. В качестве сравнения можно взять 2 файла кэшей - предыдущую страничку и текущую, причем обе они находятся в одной папке - геммора меньше. Короче все крутится возле операторов циклов: For Next, Do ...... Loop While и нижеследующего кода, который и сравнивает два файла по нескольким принципам: атрибутам, датам создания, датам изменения, по бинарным данным: Модуль:
Форма, кнопка, 2 textbox'a и несколько Label'ов:
Успехов!
|
| Автор: Эд 7.7.2005, 16:36 | ||||
Твоя мысль не проходит, потому что, чтобы проверить, изменилось ли содержание страницы, надо сперва ее скачать. А она в процессе скачки как раз и берется из кэша, поэтому результатом сравнения окажется заранее равенство. Можно, правда, перед загрузкой каждый раз физически стирать все файлы кэша, но это как-то по-ламерски было бы, и тогда как определить где именно расположен кэш на пользовательской машине? Листинг хотя и громоздкий, но сам по себе полезный, - на тему "как сравнить атрибуты файлов в VB". Жаль что без единого комментария и не по теме вопроса. Потому что вопрос-то - как запретить использование кэша во время скачки с интернета, а не алгоритм сравнения. Так что проблема осталась не проясненной!
Кстати: как принять файл - это хотя бы в принципе ясно, а вот как отправить заполненную форму? - вот за это время возник такой вопрос. В браузере два метода есть: GET и POST. А как через VB их сделать? |
| Автор: bom 12.7.2005, 19:25 |
| Привет! Как раз недавно озадачивался тем же вопросом. Не мудрствуя особо, остановился на более простом решении. Как оказалось, файлы берутся из кеша, когда они там есть и когда в настройках IE выставлена опция "Проверять обновления сохраненных страниц: никогда". Перед скачкой запоминаем сначала значение ключа "HKEY_CURRENT_USER, "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings", "SyncMode5"(dword), затем меняем его на "3", после успешной или неуспешной скачки - возвращаем прежнее значение ключу. |
| Автор: bom 12.7.2005, 19:45 | ||||
На счет Post сам не знаю, а про Get в отрывке статьи Демина Антона: Каждый элемент формы имеет свои свойства, двумя из которых являются имя и значение. Например у текстового поля может быть имя "e_mail_text", а значение "your@e-mail.ru". У CheckBox'а имя может быть "Check1", а значение "1" (в отличии от VB в HTML "галочка" может принимать значение не только "1", но и любоё другое, например "yes"). Также у всех объектов есть свой тип. Например, кнопка - button, текстовое поле - text, кнопка для отправки - submit, а кнопка для очистки полей - reset. Также существуют объекты типа hidden, которые не видны на странице, но также имеют имя и значение. Так вот после того, как пользователь нажмёт на кнопку отправки, браузер генерирует адрес страницы, на которую потом переходит пользователь. Вначале строки идёт адрес до CGI скрипта с вопросительным знаком на конце, например: http://www.someserver.ru/cgi-bin/cgi_script.cgi? Затем идёт имя первого элемента формы, после чего ставиться "=" и пишется его значение, потом "&" и имя второго элемента и т.д. В случае с отправкой сообщения в службу поддержки строка будет иметь вид: http://www.someserver.ru/cgi-bin/cgi_script.cgi?author=Some%20User&e-mail=user_email%40domen.ru&message=Some%20Message Здесь "Some User" - имя автора, "user_mail@domen.ru" - обратный e-mail, а "Some Message" - сообщение. Из-за того, что в адресе не могут быть пробелы и другие специфические символы (к которым относятся и буквы русского алфавита), их заменяют на символ "%", после которого идёт номер ASCII символа в 16ти разрядном виде. Для этого можно разобрать пример на самой простой программе, например для поиска на Яndex'е. Для этого создаёте новый проект и поместите на него текстовое поле с кнопкой. Теперь напишем код для кнопки:
Про Post смотри здесь: http://bbs.vbstreets.ru/viewtopic.php?t=7726 |
| Автор: Plamenk 18.7.2005, 16:46 |
| Добавляй в конце запроса "?". Например "mail.ru?" |
| Автор: Эд 18.7.2005, 18:06 |
| bom, спасибо за разъяснения, и особенно за ссылочку на bbs.vbstreets. Толково описана. Хотел попробовать загрузку как там сказано, но там требуется WinSock Control, а где взять этот контрол? Я так и не нашел. Так что ничего пока не получилось |
| Автор: cardinal 18.7.2005, 19:46 |
| Заходишь в проект, нажимаешь Ctrl-T, в списке выбираешь Microsoft Winsock Control и готово... |
| Автор: bom 18.7.2005, 19:52 |
| Посмотри в своей %System% директории MSWINSCK.OCX Поставляется с VB, если почему то нет, то поиск на Яндексе поможет. |
| Автор: Эд 19.7.2005, 15:35 |
| Всем спасибо, но весь список просмотрел - нету там его у меня почему-то (VB6.0) и файла такого на винте тоже, вообще нет Так что, когда раздобуду - напишу, чё получилось. |
| Автор: bom 31.7.2005, 18:36 |
| Способ без обращения к реестру. Чтоб заставить функцию URLDownloadToFile качать свежую версию файла, не зависимо от наличия того в кеше IE надо присвоить параметру dwReserved значение 1 при вызове: "dwReserved=1&". Всего хорошего. |
| Автор: Гость_KEKC 15.9.2005, 21:35 |
| Что бы страница качалась заново, надо передавать странице параметры. Т. е. не опять скачивать файл "http://abc.lv/somepage.html", а, якобы, другой "http://abc.lv/somepage.html?abcdefg123". Только, параметры должны быть каждый раз разные. Когда, я делал чат на ВБ, я создавал рандомную переменную при старте проги int(rnd*1000000), а потом, каждый раз, при скачивании, увеличивал её на 1. Ещё я буквы разные добавлял, но можно и без них. |