Скачать URL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Скачать URL

Сообщение Мамонт » 26.12.2005 (Пн) 17:39

Мне нужно скачать страницу с интернета чтобы в о время загрузки моё приложение не зависало, и по завершении скачивания сообщало о том что закачка страницы завершена! UrlDownload совершеннно неподходит т.к. пока им качаешь приложение зависает! Если качать страницы Inet Transfer Control'ом то страница скачивается почемуто неполностью!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.12.2005 (Пн) 18:01

В кирпичи.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 26.12.2005 (Пн) 18:03

Гм... Сам ненавижу такие ответы от кого бы они не исходили, но все же... В поиск по форуму ;) Тема уже обсуждалась и не раз. И был на форуме пример скачивания с прогресс-баром.
То, что для одних константа, для других только переменная...

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 26.12.2005 (Пн) 18:05

Дело в том что с прогрессбаром глючный пример! Он у меня тока www.ya.ru нармально скачивает! А на других сайтах даже www.yandex.ru ошыбку выдаёт! Типо неможет размер узнать! И поиск ничё не дал!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 26.12.2005 (Пн) 18:08

Ну, тогда винсоком качай! Пример в FAQ валялся где-то.
Изображение

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 26.12.2005 (Пн) 18:13

Да! Винсок я думаю самый подходящий вариант! Тока он добавляет всякую байду типа
HTTP/1.0 200 OK
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=windows-1251
Date: Mon, 26 Dec 2005 15:10:14 GMT
Last-Modified: Mon, 07 Nov 2005 15:13:11 GMT
Accept-Ranges: bytes
Connection: close
Content-Length: 2005

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.12.2005 (Вт) 3:38

Прежде чем называть что-то байдой, разберись, что это.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 27.12.2005 (Вт) 11:37

Format C: у меня не зависает. Я даже этот форум скачивал и ничего.Только одинвопрос.Он почему-то без картинок!Как это исправить?
#define ROFL 0xDDDD

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.12.2005 (Вт) 11:39

Format C:
Во первых это не байда а HTTP заголовок, во вторых после него идёт пустая строка, до которой всё можно обрезать
Изображение

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 27.12.2005 (Вт) 11:58

Он почему-то без картинок!Как это исправить?
#define ROFL 0xDDDD

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.12.2005 (Вт) 12:28

А как ты себе представлял - что картинки частью текста загружаются?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.12.2005 (Вт) 12:36

Грузить их отдельно!
Изображение

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 27.12.2005 (Вт) 13:31

Всё я понял! Просто я неувидел этого! :P

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 22.01.2006 (Вс) 19:24

Истчё вопрос! Как узнать что страница закачалась если я качаю её через winsock?
alibek
Злой Человек

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 22.01.2006 (Вс) 19:49

Format C:
1. Не коверкай язык. 2. В конце передачи сервер шлет два vbCrLf.
----

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 22.01.2006 (Вс) 22:17

Искали...искали... там нигде ваще двух vbCrLf подряд!!!
alibek
Злой Человек

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 22.01.2006 (Вс) 22:51

Как минимум один после заголовка, а размер документа в заголовке быть должен. Вообще обычно таймаут ставят, т. е. если долгое время ничё по каналу передачи данных не идёт, значит больше ничё и нету :)
Изображение

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 22.01.2006 (Вс) 23:13

Format C:
Пардон, 1 перевод строки отделяет данные от заголовков http и один завершает данные...
Если страница нормальный html, то можешь проверить так:
Код: Выделить всё
If Right(ReceivedData, 9) = "</html>" & vbCrLf Then MsgBox "Complete", vbInformation & vbOKOnly
----

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 23.01.2006 (Пн) 1:20

Maitris
www.ya.ru возвращает на конце просто </html>, www.yandex.ru - </html> & chr$(10), а вот www.rambler.ru вообще </html> & [несколько chr$(9)] {штук 6 вроде} & chr$(10)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.01.2006 (Пн) 8:54

Format C:, потрудись все-же писать более грамотно. Не можешь сам, так проверяй орфографию в Word. Замечание, следующее будет направлением в детсад.
Lasciate ogni speranza, voi ch'entrate.

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 23.01.2006 (Пн) 19:11

vvs_adm
Ну можно проверять возможные варианты.. Или если скорость не так важна, то InStr на </html>.
Точнее InStrRev :)
Только надо подсоединять принятый кусок к общей части, иначе, хоть и вероятность мала, может возникнуть обрывок вроде tml>
----

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 23.01.2006 (Пн) 21:03

Maitris
В принципе, можно наверное так:
1) Узнать длину из заголовка и качать сколько нужно.
2) Если длины нет, посмотреть, начинается ли док. на <html> и если да, то качать до </html>
3) Если нет, то по таймауту.

И в первых двух случаях тоже таймаут нужно смотреть.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 23.01.2006 (Пн) 22:41

vvs_adm
Проблема в том, что на практике Content Length встречается довольно редко.
----

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 23.01.2006 (Пн) 23:32

Maitris
Но зато мне все-таки кажется, что без тегов <html>-</html> документы встречаются не так уж часто. Но, конечно, неплохо бы всегда заранее знать размер документа, для статусбара, например.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Мамонт
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 479
Зарегистрирован: 21.02.2005 (Пн) 16:48
Откуда: Ленинград

Сообщение Мамонт » 02.02.2006 (Чт) 20:35

Эй! Гуры! Неужели ничего нельзя придумать?? :(
alibek
Злой Человек

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 04.02.2006 (Сб) 20:15

Format C: писал(а):Эй! Гуры! Неужели ничего нельзя придумать?? :(
vvs_adm писал(а):Maitris
В принципе, можно наверное так:
1) Узнать длину из заголовка и качать сколько нужно.
2) Если длины нет, посмотреть, начинается ли док. на <html> и если да, то качать до </html>
3) Если нет, то по таймауту.

И в первых двух случаях тоже таймаут нужно смотреть.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 04.02.2006 (Сб) 23:18

Вчера озадачился. Вот так сделал. Захотелось с сайта файлы через VBS ник скачать группой. А VB на компе не стоит. Решил выпендриться
:roll:

Код: Выделить всё
Function Download(URL,Folder)

   Dim XMLHTTP, ADOStream, FileName

   URL = Replace(URL,"\","/")
   FileName = right(URL,len(URL)-instrrev(URL,"/"))

   if len(FileName)=0 Then
      msgbox "Имя файла не указано"
      Exit Function
   End if

   Set XMLHTTP = CREATEOBJECT("Microsoft.XMLHTTP")
   XMLHTTP.open "GET", URL, "False"

   XMLHTTP.send
   If XMLHTTP.statustext = "OK" Then
      Set ADOStream = CreateObject("ADODB.Stream")
      ADOStream.type = 1
      ADOStream.Open
      ADOStream.Write XMLHTTP.responseBody

      if len(Folder) > 0 Then FileName = Folder & "\" & FileName
      ADOStream.SaveToFile FileName, 2
      ADOStream.Close
      Set ADOStream = Nothing
      Download = 1
   'Else
      'Download = 0 'XMLHTTP.statustext
   End if
   Set XMLHTTP = Nothing
End Function


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

    TopList