Утилита синхронизации файлов с HTTP в локальную папку

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 09.12.2015 (Ср) 18:08

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

Коротко опишу, что я хочу сделать.
1.
Программа просит у юзера URL, показывает ему список файлов.
Юзер ставит галки напротив файлов, которые хочет синхрить.
2.
Программа показывает юзеру выбор дисков(папок) и таймер.
Юзер выбирает папку назначения и периодичность синхры.

Написал класс для получения списка URL'ов с HTTP серверов, но подумал.
Может забить на позднее связывание с IE и в угоду фэншую написать абсолютно всё вручную на api?

Вот решил ворваться сюда со своими идиотскими вопросами. Что подскажете?
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 19:59, всего редактировалось 3 раз(а).

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

Re: Знатоки посоветуйте, как лучше

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

Ничего не понятно. Переформулируй вопросы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Знатоки посоветуйте, как лучше

Сообщение Proxy » 09.12.2015 (Ср) 20:02

Adam Smith писал(а):Программа просит у юзера URL, показывает ему список файлов.

Если эти два тезиса связаны, то предположу, что список файлов содержится в ресурсе, получаемом по данному URL.
А что представляет собой данный ресурс?

Всё, что я понял лично я:
Есть некоторый список, возвращаемый по HTTP GET (скорее-всего). Структура не известна и не важна, но он парсится и получаем на выходе список, пригодный для обработки.
Есть синхронизация файлов с удаленного хранилища и файловой системы локальной машины.
Файлы для синхронизации сопоставляются пользователем по списку файлов на удаленном хранилище.
Указанные файлы с указанными интервалами времени синхронизируются.

Далее, насколько я могу предположить, речь о необходимости создания собственного контрола, аналогичного Internet Transfer Control или ещё чего.
Вопрос про совместимость с IE остался за границами моего понимания. Что планируется менять для ухода от поддержки IE и о какой именно поддержке IE идет речь?

Adam Smith писал(а):синхрить

Буквы экономишь?
Follow the white rabbit.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 09.12.2015 (Ср) 21:35

Вроде много пишу, где уж тут экономия))) Ну например, типичный HTTP сервер [url]cp.unipay.ru[/url]
Код: Выделить всё
Index of /update/
../
banners/                                           25-Jun-2015 11:38                   -
mobile/                                            25-Jun-2015 11:38                   -
soft/                                              27-Aug-2015 14:44                   -

Proxy почти всё так, только я доверил всю работу старому доброму системному ослу.
Могу и сам отправлять GET, HEAD и снова GET запросы по каждому скачиваемому файлу.
Мог бы сам парсить HTML на предмет ссылок, хоть и кустарно, но не знаю, нужно ли оно?

От самописной реализации меня отталкивает необходимость собирать фрагменты "chunks".
И наоборот притягивает возможность легко узнать дату, размер файла перед скачиванием.

Может кто уже писал что-то практическое с обменом по протоколу HTTP, и что подскажет?
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:05, всего редактировалось 2 раз(а).

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

Re: Знатоки посоветуйте, как лучше

Сообщение Хакер » 09.12.2015 (Ср) 21:37

А почему бы не взять wget/fetch?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 09.12.2015 (Ср) 21:49

Ни разу не сталкивался с такими.
Если я правильно понял результаты поиска, это консольные утилиты для линукса.
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:06, всего редактировалось 1 раз.

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

Re: Знатоки посоветуйте, как лучше

Сообщение Хакер » 09.12.2015 (Ср) 21:50

Для win они давно портированы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 09.12.2015 (Ср) 21:57

Тот-же "installing Internet Explorer 4.0 or higher" в Requirements да и совместимость как бы намекает
Win32, i.e. MS-Windows 95 / 98 / ME / NT / 2000 / XP / 2003 / Vista / 2008 with msvcrt.dll and msvcp60.dll. If msvcrt.dll or msvcp60.dll
Получаются теже яйца только в профиль.
Качну, посмотрю функционал.
Спасибо за подсказку!

Значит лучше мне всё написать самому, если буду делать, то лучше альтернативу, а не клон))
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:07, всего редактировалось 1 раз.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 09.12.2015 (Ср) 23:22

Последняя версия оказалась 2008 года, не запустилась под Win7 Prof x64.

Похоже придется смотреть на скрины этих прог. Буду писать свою.
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:08, всего редактировалось 1 раз.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 10.12.2015 (Чт) 16:48

Код: Выделить всё
HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Thu, 10 Dec 2015 13:01:19 GMT
Content-Type: text/html
Transfer-Encoding: chunked

Я нашел простейшее решение по chunked.
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:09, всего редактировалось 4 раз(а).

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 10.12.2015 (Чт) 17:21

Оказалось достаточно попросить сервер вернуть HTTP/1.0.
Первейшая версия протокола не разрешает разбивать ответ.
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:09, всего редактировалось 2 раз(а).

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 11.12.2015 (Пт) 18:14

Знатоки и так всё знают, пишу на случай если кому-то пригодится. Хотя по кусочкам всё это можно найти на десятках других сайтов.
Подключаюсь к серверу, порту считай Winsocket'ом, хоть и не VB'шным. Отправляю туда такой запрос:
GET /doc/ HTTP/1.0
Accept: text/html
Accept-Charset: windows-1252
Cache-Control: max-age=0
Host: somehttpserver.ru
User-Agent: Microsoft Internet Explorer/4.0b1 (Windows 95)
vbCrLf(пустая строка)
vbCrLf(пустая строка)

Принимаю по кусочкам ответ сервера и HTML страницу:
HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Thu, 10 Dec 2015 20:35:10 GMT
Content-Type: text/html
Connection: close

<html>
<head><title>Index of /doc/</title></head>
<body bgcolor="white">
<h1>Index of /doc/</h1><hr><pre><a href="../">../</a>
<a href="gr_bank_kredits.png">gr_bank_kredits.png</a> 04-Nov-2014 12:59 12422
---------- проскипано ----------
</pre><hr></body>
</html>
vbCrLf(пустая строка)

Надеясь на соблюдение сервером протокола HTTP 1.0 определяю конец заголовка, отделяю его и получают HTML:
Код: Выделить всё
  Dim lDelim As Long
  lDelim = InStr(Text2.Text, vbCrLf & vbCrLf)
  If lDelim > 0 Then
    'MsgBox "Делитель найден!"
    lDelim = lDelim + 3
  Else: Exit Sub
  End If
  Text2.Text = Right$(Text2.Text, Len(Text2.Text) - lDelim)

Я не нашел способа надежнее, чем доверить парсинг страницы предназначенной для этого модели HTML:
Код: Выделить всё
  Dim html As Object
  Dim tmpElem As Variant
  Set html = CreateObject("htmlfile")
  html.body.innerhtml = Text2.Text
  'html.open
  'MsgBox html.body.innerhtml
  'html.write Text2.Text
  'html.Close
  Open App.Path & "\List.tmp" For Output As #1
    If Not html Is Nothing Then
        For Each tmpElem In html.All
          If tmpElem.tagName = "A" Then Print #1, tmpElem.href '.innerhtml '
        Next
    End If
  Close #1
  'Set html = Nothing

Из tmpElem.href получаю ссылки, из tmpElem.innerhtml отображаемые названия файлов.
Последний раз редактировалось Adam Smith 16.12.2015 (Ср) 20:05, всего редактировалось 2 раз(а).

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 17:13

Чтобы программа не подлагивала при торможениях процесса,
хочу сделать 2 отдельных процесса, интерфейсный и рабочий.

Посоветуете из вашего опыта, как реализовать обмен между процессами?

Первыми мне в голову лезут простейшие костыли на api PostMessage
Дочерний процесс в командной строке получает hWnd тексбокса
и отправляет в тот текстбокс hWnd своего текстбокса.
Теперь оба процесса могут слать PostMessage друг другу :lol:

Советуют аж в бородатом году http://www.codeproject.com/Articles/3815/Inter-process-communication-using-registered-messa

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

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

Adam Smith писал(а):Посоветуете из вашего опыта, как реализовать обмен между процессами?

Standard EXE и ActiveX EXE для интерфейсного и бэкенда соответственно.
Коммуникация на базе ООП-взаимодействия.

Adam Smith писал(а):Первыми мне в голову лезут простейшие костыли на api PostMessage
Дочерний процесс в командной строке получает hWnd тексбокса
и отправляет в тот текстбокс hWnd своего текстбокса.
Теперь оба процесса могут слать PostMessage друг другу :lol:

Адовая чушь. Никаких текстбоксов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 18:22

Красивое решение получилось бы, но не получается в ActiveX DLL добавить форму с юзерконтролом.
Последний раз редактировалось Adam Smith 13.12.2015 (Вс) 13:06, всего редактировалось 1 раз.

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

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

Ты слышишь, что тебе говорят?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 19:10

Вижу, что мне пишут))

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 19:29

Поменял тип проекта, есть юзерконтрол.
Спасибо за совет!
пробую ActiveX EXE

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

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

Зачем тебе юзерконтрол внутри бэкенд-компонента?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 19:37

Он замена Winsock. События там и всё такое.
Хотя можно попробовать переписать под класс.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 19:44

От формы отказаться не получится, api WSAAsyncSelect должна куда-то возвращать события.
Последний раз редактировалось Adam Smith 13.12.2015 (Вс) 12:53, всего редактировалось 1 раз.

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

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

Ерунду говоришь. Сокет отлично укалдывается в класс без всяких форм. API функции тоже никакая форма не нужна — ей нужно окно, а это может быть в том числе MOW (message-only window).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 12.12.2015 (Сб) 21:13

Да, я уже переписываю юзерконтрол в класс.
Мне бы помог готовый пример создания такого окна, а то приходится изгаляться:
Код: Выделить всё
Private WithEvents Fm As Form

Private Sub Class_Initialize()
  Set Fm = New F
End Sub

Private Sub Fm_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

  Dim reBytes As Long
  Dim reData  As String * 16384
...
End Sub


Вы предлагаете создать форму через CreateWindowEx и субклассить её у себя в классе?
Последний раз редактировалось Adam Smith 13.12.2015 (Вс) 12:52, всего редактировалось 1 раз.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 13.12.2015 (Вс) 12:49

Я всё таки оставил пустую форму в библиотеке.
Не понял, как вы предлагаете создать рабочую форму.
И кстати, почему не ActiveX DLL, а именно ActiveX EXE ?

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Хакер » 13.12.2015 (Вс) 12:50

Adam Smith писал(а):И кстати, почему не ActiveX DLL, а именно ActiveX EXE ?

Потому что будет работать в том же потоке.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 13.12.2015 (Вс) 13:10

ActiveX EXE значит будет стабильно работать в своей отдельной треаде?
Ну само собой это не получится. Чувствую вы мне щас насоветуете :D
Я не жалуюсь, я об этом и просил.


И даже с event'ами будет работать?

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 13.12.2015 (Вс) 15:13

Таймер на форме каждые 150 милисекунд обновляет заголовок, это чтобы я видел, что нить GUI не висит.
Делаю так:
Код: Выделить всё
Dim oBackThread as Object
Set oBackThread = CreateObject("Test.Data")
txtPlug.Text="www.unipay.ru"
txtPlug.Text = oBackThread.Plugin(txtPlug.Text)

Пока в Test.exe идет закачка с сайта GUI висит.
Искать ответ в статьях Trik'а или дадите ссылку?
И ещё, event'ов из ActiveX EXE не будет, я правильно понял?

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Хакер » 13.12.2015 (Вс) 15:21

Искать ответ в прокачке своего уровня грамотности, а не набеге на какие-то отдельно вырванные из общей темы статьи.

Adam Smith писал(а):И ещё, event'ов из ActiveX EXE не будет, я правильно понял?

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

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Adam Smith » 13.12.2015 (Вс) 16:02

Ок, ухожу за знАниями! И спешу поверить, что я произвел такое впечатление.
Всё понимаю глядя на соседнюю тему, где человек вообще ничего не знающий
не только получил готовый исходник, но даже и исправление. Где там мой попкорн :roll:
Ради того, чтобы ещё раз блеснуть остротой ума и знанием темы даются исходники, а не ради совета.
Очевидно в этой теме было мало розовых соплей и деферамбов, и она разумеется не заслуживает внимания.
Нет тут изменений с 2008 года, но я может ещё загляну если через пару лет ещё что-нибудь захочу написать.

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

Re: Утилита синхронизации файлов с HTTP в локальную папку

Сообщение Хакер » 13.12.2015 (Вс) 19:42

Чем ты недоволен?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

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

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

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 44

    TopList