Плагин http.spf

Файл: http.spf
Автор: Nicholas Nemtsev
Описание: Дополнительные слова, позволяющие отслеживать изменения удаленных файлов по протокулу http, получать дату и время их последнего изменения и даже загружать файлы на локальный компьютер.

Новые слова:


HTTP-CHANGED: <URL> ( -- ?)

Проверяет, не изменился ли ресурс по указанному URL с момента последнего запуска HTTP-CHANGED:. При проверке используется http-заголовок Last-Modified. Корректная работа слова HTTP-CHANGED: возможна только если удаленный http-сервер возвращает заголовок Last-Modified.

Код возврата http-сервера записывается в пользовательскую переменную HTTP-RESULT.

При первом использовании слово HTTP-CHANGED: сохраняет время последнего изменения ресурса в файл etc\htime.txt в домашней директории nnCron, а затем, при последующих использованиях, сравнивает сохраненное время с тем временем, которое возвращает http-сервер в заголовке Last-Modified. Если время отличается, то результатом работы HTTP-CHANGED: будет TRUE (-1). Если время совпадает, то HTTP-CHANGED: вернет FALSE (0).

Не забывайте, что слово HTTP-CHANGED: возвращает флаг. Это означает, что HTTP-CHANGED: нужно иcпользовать совместно с конструкцией IF ELSE THEN или явным образом удалять со стека возвращенное HTTP-CHANGED: значение.

Пример:

#( help_ru-notify
AsLoggedUser
OnceAHour
: help_ru S" http://www.nncron.ru/download/help_ru.zip" ;
Rule:
    ONLINE? DUP
    IF
       DROP
       HTTP-CHANGED: %help_ru% 
    THEN
Action:
    QUERY: "%help_ru% is changed.%crlf%Download it?"
    IF
        S" help_ru.zip" DELETE-FILE DROP
        ShowMinimized
        START-APP: wget %help_ru%
    THEN
)#

Существует постфиксный вариант слова HTTP-CHANGED:

S" http://www.nncron.ru/index.html" HTTP-CHANGED

HTTP-GET: <URL> ( -- a u ior)

Возвращает код возможной ошибки и строку с содержимым удаленного ресурса, т. е. загружает указанный ресурс на локальный компьютер. Основное предназначение слова HTTP-GET: - загрузка html-страниц с целью их последующей обработки ( например, поиска по ключевым словам). HTTP-GET: не поддерживает "докачку", поэтому для загрузки бинарных данных лучше использовать специальные утилиты. Впрочем, при необходимости, с помощью HTTP-GET: можно загружать и бинарные данные. Код возврата http-сервера записывается в пользовательскую переменную HTTP-RESULT.

Пример:

Action:
     S" http://www.nncron.ru/download/help_ru.zip" HTTP-GET 0=
     IF
        S" help_ru.zip" FWRITE
     ELSE 2DROP THEN

Существует постфиксный вариант слова HTTP-GET:

S" http://www.nncron.ru/index.html" HTTP-GET

HTTP-LM: <URL> ( -- a u ior)

Возвращает код возможной ошибки и строку с содержимым заголовка Last-Modified, полученную от удаленного http-сервера, т. е. время последнего изменения удаленного ресурса. Код возврата http-сервера записывается в пользовательскую переменную HTTP-RESULT.

Пример:

#( test_http_lm
NoActive
Action:
    HTTP-LM: "http://www.nncron.ru/download/help_ru.zip" 0=
    IF
        2DUP
        \ выводим дату последнего изменения на консоль
        TYPE CR
        \ выводим сообщение с этой же датой
        MsgBox
    ELSE
        2DROP
        MSG: "Error in http-response"
    THEN
)#

Существует постфиксный вариант слова HTTP-LM:

S" http://www.nncron.ru/index.html" HTTP-LM

HTTP-RESULT

Содержит код возврата http-сервера (после работы слов HTTP-CHANGED:, HTTP-GET: и HTTP-LM:).

Вот самые распространенные коды:

200 - все в порядке.
404 - ресурс не найден
и т. д. (полный список кодов можно найти в документации к веб-серверу).

Код 0 означает, что ошибка произошла не на http-сервере (самое вероятное - возникли проблемы с сетью). В этом случае имеет смысл изучить код возврата HTTP-GET: и HTTP-LM:.

Пример:

#( test_http-result
NoActive
Action:
    HTTP-CHANGED: "http://www.nncron.ru/download/help.zip"
    HTTP-RESULT 200 <>
    IF
        DROP
        MSG: "There was an error: %HTTP-RESULT%"
    ELSE
        IF
            MSG: "help.zip was changed"
        THEN
    THEN
)#

HTTPProxy: "proxy_server"

Задает прокси-сервер для использования со словами, определенными в плагине http.spf. См. также HTTPProxyPort:. Обратите внимание: это слово устанавливают глобальную переменную, поэтому его следует использовать в nncron.ini.

Пример:

HTTPProxy: "proxy.provider.ru"

HTTPProxyPort: <port_number>

Задает номер порта прокси-сервера (см. HTTPProxy:). Значение по умолчанию: 3128. Обратите внимание: это слово устанавливают глобальную переменную, поэтому его следует использовать в nncron.ini.

Пример:

HTTPProxyPort: 3100

HTTPProxy-Authorization: username:password

Задает логин и пароль для авторизации на прокси-сервере (см. HTTPProxy:). Обратите внимание: это слово устанавливают глобальную переменную, поэтому его следует использовать в nncron.ini.

Пример:

HTTPProxy-Authorization: user:password

URL - строка с полным адресом удаленного ресурса по http-протоколу.

Примеры:

HTTP-CHANGED: "http://www.nncron.ru/index.html"
HTTP-LM: "http://www.nncron.ru/download/help_ru.zip"

Не забывайте добавлять прямой слеш в конец адреса, когда обращаетесь не к конкретному файлу, а к целому каталогу или "дефолтной" странице (index.htm, index.html и т. д.):

HTTP-CHANGED: "http://www.nncron.ru/"
HTTP-CHANGED: "http://www.nbk.orc.ru/nncron/"