WebBrowser. Coхранить полученный файл.

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

WebBrowser. Coхранить полученный файл.

Сообщение igor_m » 06.02.2010 (Сб) 18:29

С ходу не получается, читанием ссылок от поисковика не находится. Но думаю, это простая вещь, если знать. По сути нужно по URL получить текстовый файл и сохранить, протокол HTTP.

VB6.0
webbrowser1.navigate strURL
' от сервера получается текстовый файл. Открывается диалог с предложением открыть или сохранить полученный файл. Нужно просто сохранить этот файл, послать новый запрос через webbrowser1 и т.д.

Все равно как это сделать, лишь бы сделать.
1) Отследить момент загрузки файла, найти диалоговое окошко, дать команду "Сохранить как...", сохранить куда нужно. Диалог закрывается сам.
2) Сделать так, чтобы этот текст (файл) грузился в основное окошко webbrowser1, отследить момент окончания загрузки, сохранить содержимое окошка (там даже тэгов нет, только *.txt). В IE6.0 так грузится в основное окошко, если ему ссылку дать, но в конце не указывать версию HTTP, а в VB6.0 - WebBrowser открывается диалог.
3) Может есть какие-то другие простые способы. Пока я нашел, что есть еще такой Internet Transfer Control, попробую с ним, может получится, но сервер отдает файл именно по HTTP протоколу.

p.s. Боюсь без помощи надолго зависнуть с этим.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: WebBrowser. Coхранить полученный файл.

Сообщение Хакер » 06.02.2010 (Сб) 18:32

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: WebBrowser. Coхранить полученный файл.

Сообщение iGrok » 06.02.2010 (Сб) 18:48

А может лучше так?
viewtopic.php?f=28&t=19857
label:
cli
jmp label

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: WebBrowser. Coхранить полученный файл.

Сообщение BION » 06.02.2010 (Сб) 18:53

Код: Выделить всё
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _
    ByVal pCaller As Long,
    ByVal szURL As String,
    ByVal szFileName As String,
    ByVal dwReserved As Long,
    ByVal lpfnCB As Long) As Long
Буээ!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: WebBrowser. Coхранить полученный файл.

Сообщение Хакер » 06.02.2010 (Сб) 18:54

Подпись оправдывает контент сообщения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: WebBrowser. Coхранить полученный файл.

Сообщение BION » 06.02.2010 (Сб) 18:59

Хакер писал(а):Подпись оправдывает контент сообщения.


Что-то не так, Капитан?
Буээ!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: WebBrowser. Coхранить полученный файл.

Сообщение Хакер » 06.02.2010 (Сб) 19:04

Отсутствие какой-либо обратной связи.

Использование допустимо в двух случаях: консольное приложение (консоль не блокируется от блокировки основного потока) или многопоточное приложение (создаётя поток, в котором эта функция работает, и который оповестит главный поток о завершении её работы и результате; а основной поток в это время показывает, например, весёлые картинки)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: WebBrowser. Coхранить полученный файл.

Сообщение BION » 06.02.2010 (Сб) 19:09

Хакер писал(а):Отсутствие какой-либо обратной связи.

Использование допустимо в двух случаях: консольное приложение (консоль не блокируется от блокировки основного потока) или многопоточное приложение (создаётя поток, в котором эта функция работает, и который оповестит главный поток о завершении её работы и результате; а основной поток в это время показывает, например, весёлые картинки)


Согласен. Просто пока писал, не заметил пост чуть выше моего. Там как раз эти проблемы и решаются.
Буээ!

igor_m
Постоялец
Постоялец
 
Сообщения: 343
Зарегистрирован: 22.03.2002 (Пт) 12:40

Re: WebBrowser. Coхранить полученный файл.

Сообщение igor_m » 06.02.2010 (Сб) 19:42

Всем спасибо за участие. Собственно вернулся чтоб сказать, что вопрос снят.
Internet Transfer - то что доктор прописал для данного случая. Причем .OpenURL() работает в синхронном режиме и не нужно париться отслеживая всякие события. Простейшая и удобнейшая вещь. А я чудил, столько лет WinSock пользовался :) Рекомендую будущим искателям.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: WebBrowser. Coхранить полученный файл.

Сообщение iGrok » 06.02.2010 (Сб) 20:57

igor_m писал(а):...работает в синхронном режиме и не нужно париться отслеживая всякие события.

Вот так всегда. Ему, понимаешь, правильные решения подсказывают. А он "не нужно париться".

Гиговый файл ты тоже в синхронном режиме грузить будешь, да?
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: WebBrowser. Coхранить полученный файл.

Сообщение Хакер » 06.02.2010 (Сб) 20:59

Да дело в гиговом файле. Дело в том, что неразумная голова не предполагает, что даже загрузка 100-байтного ресурса может затянуться на 30 минут.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

igor_m
Постоялец
Постоялец
 
Сообщения: 343
Зарегистрирован: 22.03.2002 (Пт) 12:40

Re: WebBrowser. Coхранить полученный файл.

Сообщение igor_m » 06.02.2010 (Сб) 21:43

Уважаемые, я уверен, что вы больше знаете в этой области, лучше разбираетесь и вообще круче. Иначе я бы не заходил сюда в трудные времена за помощью :)
Но поймите, ведь каждый ищет свои решения, для своих конкретных применений. Иногда случайно можно найти именно то, что нужно. Мои файлы размером 5-15 КБ, но их 80 штук, каждый день одни и те же. Скачиваются они все вместе за 3-4 минуты, естественно в автомате, все это за 5 лет ежедневного скачивания проверено сотни раз. Если где-то что-то сбойнет, я просто запускаю весь список заново, мне потратить дополнительно 3 минуты выгоднее, чем редактировать список убирая оттуда то, что уже скачалось. И в остальных вопросах так же. Можно сказать, что запуская заново в потоке скачиваться уже скачанные файлы, я уже убиваю асинхронность. И за 5 лет каких-то сбоев было, может, 10-20 раз. Т.е. для меня это непринципиально. Если же у меня возникнет другая задача, то я сделаю инструмент под нее.
За ответы большущее спасибо, может они мне пригодятся.

ДОБАВЛЕНО.
Уважаемые Хакер, iGrok и другие знатоки форума, по данной теме есть у меня вопрос, который я так и не смог решить год назад. Сейчас это не первейшая актуальность, но если вы поможете найти ответ, буду рад. И надеюсь - другим это может пригодиться.
Как уже сказал, скачивалка построена на WinSock. Несколько лет все было чудесно, по HTTP1.0 сервер отдавал асинхронно весь файл, при этом в заголовке был размер файла. Собственно задача стояла принять количество байт указанное в заголовке, затем разорвать соединение - все просто. Но как это всегда бывает, у кого-то зачесались руки и на сервере то ли поменяли какие-то настройки, то ли сменили HTTP-сервер.
Сервер стал отдавать файл кусками (chunked), при этом в заголовке размер файла уже не указывается. Возник вопрос - как определить момент окончания скачивания чтоб разорвать соединение. Поизучав соответствующие RFC ответ я так и не нашел. Критерием стали vbCrLf в конце принятого chunk (пробовал vbCrLf & vbCrLf но такого окончания нет). Проблема в том, что файл строковый, поэтому иногда случается, что chunk попадает как раз на конец строки и файл остается недокачанным. Самым легким решением оказалось написать проверялку, которая смотрит последнюю строку файла и если она не такая как нужно, эти 1-2 файла просто скачиваю руками. Не сказать, что это трудно, но поднадоело.
Тогда же был испробован HTTP1.1 Там с концом приема как раз все хорошо, уже не помню, но кажется = vbCrLf & vbCrLf, определяется четко. Но есть своя проблема - файл отдается кракозябрами, как-то заархивированным. Алгоритм или других способов разархивации я найти не сумел.
Поэтому сейчас и решил применить Iternet Transfer - он такие вещи решает сам, да и написание с тестированием заняло полчаса, что есть хорошо.
Не знает ли кто - как определить конец передачи по HTTP1.0 (chunked) или преобразовать полученное по HTTP1.1 в нормальный вид ?


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 152

    TopList