Описание утилиты WebTools |
Утилита WebTools написана мной для выполнения изменений на моём внешнем сайте и реализует функции FTP-клиента через http-proxy:8080, при этом используется wsDmur.ocx. Нужно отметить, что из-за ограничений, налагаемых http-proxy, не весь набор операций над данными на FTP-сервере поддержан. По существу возможны только: чтение, изменение и добавление файлов в существующие каталоги, в то время как операции создания новых каталогов, а также удаления файлов/каталогов недопустимы. Последние мне приходится выполнять используя инструментальные средства администрирования на моём Web-сервере. Основное назначение, к которому я стремился, это распознавание последних изменений в файлах, выполненных на локальном компьютере, и засылка только их (изменённых файлов) на внешний FTP-сервер, при этом размер файлов не должен превышать 1MB.
Если Вас интересует только закачка данных с внешних FTP-серверов через http-proxy:8080, то как надеюсь, утилита WebTools поможет Вам в этом, никаких ограничений на объём файлов в этом случае не налагается, а при обрыве соединений сервером, после успешной попытки повторного соединения, производится попытка докачки.
Приложение написано средствами MS VC++ 6.0 (MFC) и представляет собой MDI-приложение
Рис. 1 Приложение WebTools.
в котором может быть открыто произвольное количество документов, каждый из которых "связан" с адресом конкретного внешнего FTP-сервера.
Для открытия нового документа и установки ему адреса внешнего FTP-сервера необходимо, при отсутствии каких-нибудь открытых файлов, вызвать диалог свойств "Application properties" (пункт меню Tools/Properties...)
Рис. 2 Диалог "Application properties" (General, Proxy).
и изменив http-команду (свойство Command) к Вашему http-proxy-серверу на требуемую, создать новый документ (пункт меню File/New). Обратите внимание, что если Ваш IP-адрес зарегистрирован на proxy-сервере, то никакие поля на закладке Proxy заполнять не требуется, в противном случае, следует определить UID и PWD для так называемой basic-авторизации на proxy-сервере. Назначение других свойств приведено в Таблице 1:
Название | Назначение |
Remote Host | Название proxy сервера. |
Remote Port | Порт proxy сервера. |
File Name | Временный файл для результатов запросов, получаемых с сервера . |
Data Folder | Подкаталог для файлов, загруженных с сервера (см. Open, Download ниже). |
Log File | Журнал команд, выполняемых wsDmur.ocx (при отсутствии значения св-ва журнал не ведётся). |
Command | Http-команда загрузки корневого каталога с FTP-сервера. |
UID | Имя пользователя на proxy сервере. |
PWD | Пароль пользователя на proxy сервере. |
Http-header | Дополнительные параметры, помещаемые в http-заголовок. |
Таб. 1 Назначение "Общих свойств приложения".
Относительно свойства Http-header
нужно отметить, что строки, помещённые в качестве
его значения, заносятся в http-заголовок сразу
после команды (указанной в свойстве Command).
В частности, этим свойством можно
воспользоваться для авторизации на proxy-сервере,
если по каким-либо причинам basic-авторизация
Вас не устраивает. Более подробно см. в файле Readme
wsDmur.ocx. Наконец, если Ваш FTP-сервер, также требует
авторизованного доступа, то формат команды
должен быть таким:
"GET ftp://UID:PWD@ftp_host.com/", где UID и PWD
соответственно имя и пароль пользователя на
Вашем FTP-сервере.
После создания файла все перечисленные свойства приложения становятся свойствами конкретного файла, и могут быть изменены, за исключением свойства Command. Если вызвать диалог свойств документа (пункт меню Tools/Properties...) при любом активном документе, то мы получим диалог изменения свойств именно этого документа.
В случае, если Вы предполагаете вносить изменения в файлы на Вашем FTP-сервере, то на закладке Location Вы должны установить соответствие между папками Вашего FTP-сервера и папками на локальных дисках Вашего компьютера, причём сделать это для каждой папки сервера:
Рис. 3 Диалог "Document properties" (Location).
При включенном флажке 'Reset All Subfolders' процесс определения месторасположения папок на локальном диске (Local Path) будет продолжен рекурсивно для всех подкаталогов, принадлежащих данному. По этому, в случае, когда структуры каталогов на FTP-сервере и на Вашем локальном диске совпадают, достаточно выполнить установку только для корневого каталога. Далее, предполагается, что в таким образом указанных папках на локальных дисках Вашего компьютера расположены именно те файлы (в соответствии с файлами на FTP-сервере) изменение которых Вы и предполагаете засылать на Ваш FTP-сервер. Проследите за тем, чтобы в отмеченных Вами каталогах была точная копия файлов Вашего внешнего FTP-сервера. С другой стороны, нужно отметить, что если Вы не предполагаете засылать изменения на FTP-сервер, то не следует определять значение свойств Local Path на закладке Location диалога "Document properties". Отсутствие значения свойства Local Path делает недоступными операции по изменению файлов как на локальных дисках, так и на FTP-сервере (см. Edit, Upload ниже).
Информация о содержимом каталогов сервера/локального компьютера храниться в файлах с расширением wde, просмотр которых возможен из приложения WebTools без непосредственного обращения к серверу. Для регистрации в системном реестре расширения wde имеется небольшой файл: DocExtention.reg
REGEDIT HKEY_CLASSES_ROOT\.wde = WebTools.Document HKEY_CLASSES_ROOT\WebTools.Document = WebTools Doc HKEY_CLASSES_ROOT\WebTools.Document\DefaultIcon = D:\Program Files\FtpClient\WebTools.exe,1 HKEY_CLASSES_ROOT\WebTools.Document\shell\open\command = D:\Program Files\FtpClient\WebTools.exe "%1" HKEY_CLASSES_ROOT\WebTools.Document\shell\open\ddeexec = [open("%1")]
подправив пути в котором и зарегистрировав его в системном реестре, Вы сможете вызывать приложение WebTools двойным щелчком на файлах с расширением wde из Windows Explorer.
Вся незамысловатая работа с приложением WebTools может быть рассказана путём объяснения ряда "не стандартных" пунктов меню Tools (на Рис. 4 слева) и всплывающего меню, вызываемого по правой клавише мыши на правом окне документа (на Рис. 4 справа).
Рис. 4 Пункты меню
Прежде всего, если в документе не устанавливалось соответствие между папками на FTP-сервере и каталогами на дисках локального компьютера, т.е. на закладке Location в окне свойств "Document properties" (см. выше), то ряд пунктов не будет доступными, к ним относятся:
Название |
Г. кл. |
Пояснения |
Refresh local | Ctrl+F5 | Обновляет информацию о файлах на локальных дисках. |
Clear all changes | Ctrl+F8 | Удаляет всю информацию о последних изменениях локальных файлов. |
Upload all changed | F8 | Организует обновление файлов на внешнем FTP-сервере, согласно последним изменениям. |
Edit | F4 | Запускает редактор для локального файла. |
Upload | Ctrl+F4 | Организует обновление выделенного множества файлов на внешнем сервере. |
Open local | Ctrl+F6 | Открытие локального файла, используя его приложение-просмотрщик. |
Таб. 2 Команды, обеспечивающие изменение данных на сервере.
Остальные пункты доступны почти всегда и означают:
Название |
Г. кл. |
Пояснения |
Refresh item | F5 | Обновляет информацию о файлах c внешнего FTP-сервера. |
Select all files | Ctrl+A | Выделяет все файлы текущей папки. |
Open | F3 | Загружает файл с внешнего FTP-сервера и пытается открыть его используя приложение-просмотрщик файла. |
Download | Ctrl+F3 | Загружает выделенное множество файлов с внешнего FTP-сервера. |
Remove all downloads | F8 | Удаляет с локального диска все файлы (см. св-во Data Folder из "Application properties"), которые загружались/открывались (Open, Download) во время сеанса. |
Таб. 3 Команды, обеспечивающие получение данных с сервера.
С каждым документом связан только один экземпляр wsDmur.ocx, обслуживающий его работу с сервером, поэтому будьте терпеливы в ожидании полного завершения любой команды обращения к серверу (Refresh Item, Open, Download; Upload all changed, Upload) прежде чем пытаться начать выполнять другую, однако, вполне допустима одновременная работа с разными документами.
При загрузки данных с сервера (Open, Download), анализируя содержимое очередного блока данных, полученных с сервера, в случае наличия в нём информации о длине данных в блоке, в нижней части окна документа появляется ProgressBar, и соответственно не появляется, в случае отсутствия подобной информации.
Рис. 5 Информация о процессе загрузки данных с сервера.
Здесь формат числовых данных, представленных в
правой части, таков:
загружено / всего : процент_загруженного
(количество_обрывов_соединения)
При засылке данных на FTP-сервер (Upload all changed, Upload) подобная информация никогда не предоставляется сервером. Все данные объединяются в один блок размером до 1MB, а в качестве результат мы получаем лишь уведомление о успешном (или неудачном) завершении попытки изменения данных на сервере.
Логика определения последних изменений не контролирует дату изменения файлов на сервере и опирается исключительно на дату последних изменений файлов на локальных дисках Вашего компьютера. Поэтому не требуется какого-либо согласования времени/даты сервера и Вашего компьютера, однако это делает невозможным внесение изменений с нескольких различных компьютеров на FTP-сервер на основании даты последних изменений.
Версия | Пояснения к изменениям |
2.0.6.1 |
Устранен ряд обнаруженных проблем, в
частности: - добавлена закладка Proxy в диалог Application/Document Properties со свойствами UID и PWD , т.е. если указаны свойства UID и PWD, то параметр Proxy-authorization: basic UID:PWD в http-заголоке формируется программно, и Вы избавлены от необходимости использования внешней утилиты для перекодировки подстроки UID:PWD в Base64. - ни в системный реестр ни в файл с расширением wde пароли пользователя в открытом виде больше не пишутся. |
2.0.6.2 |
Устранены следующие ошибки: - файлы, удалённый на локальной машине оставались помеченными как существующие - при очень длинных названиях файлов на сервере происходило зависание. |
2.0.6.3 |
Добавлен пункт меню Open local, позволяющий открывать локальные файлы для просмотра. |
2.0.6.4 |
Прежние версии были написаны под Proxy-server Squid/2.3.STABLE4, в то время как версия (т.е. 2.0.6.4) адаптирована под MS ISA Server Firewall 1.1. Я пытался внести изменения так, чтобы эта версия осталась работоспособной и под Squid, однако до конца не уверен, что это у меня получилось, а проверить, к сожалению, нет возможности... Буду благодарен за любую информацию по этому поводу. |