+  HandyCache форум
|-+  Главная категория» Общие вопросы» Расширения на языке Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: 1 ... 15 16 [17] 18 19 ... 29   Вниз
  Отправить эту тему    Печать  
Автор Тема: Расширения на языке Lua в HandyCache  (Прочитано 438264 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #320 : 25 февраля 2012, 07:00:33 »

Имеется скрипт который в зависимости от URL и некоторых других параметров использует разные прокси, имеется список прокси и теперь вопрос: можно ли каким-то образом проверить перед использованием прокси доступен он или нет, и если не доступен то перейти к следующему по списку? Собственно вопрос как узнать рабочий прокси или нет...
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #321 : 25 февраля 2012, 12:30:10 »

Собственно вопрос как узнать рабочий прокси или нет...

Послать через этот прокси пробный HTTP-запрос с помощью hc.send_request()
« Последнее редактирование: 25 февраля 2012, 12:36:46 от DenZzz » Сообщить модератору   Записан
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #322 : 25 февраля 2012, 12:50:11 »

Послать через этот прокси пробный HTTP-запрос с помощью hc.send_request()
А как понять есть ли ответ или нет, ведь hc.send_request() не возвращает никаких значений?
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #323 : 25 февраля 2012, 15:04:11 »

Можно отправить запрос через текущий прокси и, если будет ошибка соединения (перехватить ответ и проанализировать), то следующий запрос отправить через другой прокси.
Другой вариант - взять lua-библиотеку для работы с сокетами и проверить работоспособность проси. Здесь где-то есть мое расширение, работющее с такой библиотекой.
Сообщить модератору   Записан
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #324 : 27 февраля 2012, 10:20:19 »

Буду пробывать, а пока заметил баг: не правильно работают hc.hide_in_active_list и hc.hide_in_monitor, либо я не понял функционал. Скриптом устанавливаешь в true, но они продолжают появляться, но если нажать в мониторе "Фильтрация записей в мониторе", а потом включить/выключить "Разрешить фильтрацию", то они действительно пропадают (даже после выключения! что есть правильно), а нужно чтобы они сразу пропадали или я не правильно понял? Если правильно, то это явно не доработка, хоть и не большая...

Ну и ещё хорошо было бы тогда добавить в execute_cmd, опцию для изменения режима фильтрации или уже имеется?
И если не будет нахальством ещё небольшая просьба: нельзя ли опцию "чтение из кеша" добавить в Белый Список, ну и тогда можно будет убрать hc.read_from_cache_on, тем более что и без скрипта также можно будет добавлять правила (дополнительный список создавать не нужно, пусть прямо в белом списке просто включается/выключается опция). Где такое может пригодиться? Ну сразу приходят на ум различные чаты, их не имеет смысла ни записывать, и запрашивать с диска, только из интернета...
« Последнее редактирование: 27 февраля 2012, 10:49:39 от Zoynels » Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #325 : 27 февраля 2012, 13:16:50 »

Цитировать
Скриптом устанавливаешь в true, но они продолжают появляться, но если нажать в мониторе "Фильтрация записей в мониторе"
Вы в обработчике какого события hc.hide_in_active_list и hc.hide_in_monitor используете? Вы заметили, что их можно использовать только в обработчике BeforeViewInMonitor?
Цитировать
И если не будет нахальством ещё небольшая просьба: нельзя ли опцию "чтение из кеша" добавить в Белый Список
Там уже есть Запись в кэш. Заблокируйте запись и читать нечего будет.
Сообщить модератору   Записан
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #326 : 27 февраля 2012, 17:33:30 »

Цитировать
Скриптом устанавливаешь в true, но они продолжают появляться, но если нажать в мониторе "Фильтрация записей в мониторе"
Вы в обработчике какого события hc.hide_in_active_list и hc.hide_in_monitor используете? Вы заметили, что их можно использовать только в обработчике BeforeViewInMonitor?
Действительно оказалось что запрашивал из другого обработчика (RequestHeaderReceived)
Сообщить модератору   Записан
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #327 : 06 марта 2012, 09:49:39 »

хм, существуют расширения eR_Dont_update_image_by_type_in_cache.lua и eR_Dont_update_video_by_type_in_cache.lua, а как можно тоже самое сделать но с zip и прочими архивами, всё таки на форумах в аттачах бывают не только рисунки и видео, очень часто как раз архивы. Пока в hc.cache_file_content_type отображается пустая строка иначе сам бы сделал.
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #328 : 08 марта 2012, 18:29:07 »

подскажите как сделать чтоб такое расширение срабатывала только тогда когда размер файла меньше килобайта.
--[[ <HCExtension>
@name          Çàïðåòèòü ÷òåíèå èç êýøà í WiiNet  (R-NoCache)
@author        DenZzz
@version       0.1
@description   Çàïðåùàåò ÷èòàòü èç êýøà. Óäàëÿåò IMS è INM èç çàãîëîâêîâ çàïðîñîâ.
@rule            attach
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function Request()
   if re.find(hc.url, [[handycache.ru]]) then
      hc.request_header = re.replace(hc.request_header, [[^If-Modified-Since:[^\r\n]+\r\n]], '')
      hc.request_header = re.replace(hc.request_header, [[^If-None-Match:[^\r\n]+\r\n]], '')
      hc.read_from_cache_on = false
      hc.white_mask = 'Í'
      hc.monitor_string = hc.monitor_string..'R-NoCache WiiNet'
   end
end
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #329 : 08 марта 2012, 23:33:41 »

Посмотрите расширение Extensions\eA_Dont_update_file_by_size.lua.
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #330 : 09 марта 2012, 07:06:51 »

я работал с этим расширением но склеить их вместе у меня не получается. ПОМОГИТЕ
Добавлено: 09 Март 2012, 06:49:50

изначально брал за основу  расширение "блокировать загрузку больших файлов (A-long)" но нужного результата добиться не смог
Добавлено: 09 Март 2012, 06:58:11

--[[ <HCExtension>
@name          Áëîêèðîâàòü çàãðóçêó áîëüøèõ ôàéëîâ (A-long)
@author        DenZzz
@version       1.1 äëÿ HC v1.00 RC2 (1.0.0.175) è âîçìîæíî âûøå
@description   Áëîêèðóåò çàãðóçêó ôàéëîâ, êîòîðûå áîëüøå çàäàííîãî ïðåäåëüíîãî ðàçìåðà
@event         AnswerHeaderReceived/Answer
</HCExtension> ]]



function GetContentLength(s)
  _,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end



function Answer()

 -- çàáèðàåì ðàçìåð ôàéëà èç çàãîëîâêà 'Content-Length'
  len = GetContentLength(hc.answer_header)

   -- åñëè ðàçìåð ôàéëà åñòü â çàãîëîâêå è îí áîëüøå 200000 áàéò
    if len < 1024 then
     -- è äåéñòâèå HC åùå íå ïðèñâîåíî èëè ïðèñâîåíî 'Ñîõðàíÿòü', òî áëîêèðîâàòü çàãðóçêó
      function Request()
       if re.find(hc.url, [[handycache.ru]]) then
       hc.request_header = re.replace(hc.request_header, [[^If-Modified-Since:[^\r\n]+\r\n]], '')
       hc.request_header = re.replace(hc.request_header, [[^If-None-Match:[^\r\n]+\r\n]], '')
       hc.read_from_cache_on = false
       hc.white_mask = 'I''
       hc.monitor_string = hc.monitor_string..'R-NoCache WiiNet'
      end
    end
end

end  -- Êîíåö ôóíêöèè Answer




подскажите где я ошибся
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #331 : 09 марта 2012, 08:33:10 »

Что если вместо AnswerHeaderReceived использовать RequestHeaderReceived и вместо
len = GetContentLength(hc.answer_header)
написать
len = hc.cache_file_size
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #332 : 14 марта 2012, 14:37:52 »

Подскажите где ошибка




--[[ <HCExtension>
@name          WiiProxy WOW
@author        igorek
@version       0.2
@description   Ïðîâåðèòü äîñòóïíîñòü âíåøíåãî ïðîêñè
@event      Init/init
@event      Timer1m/timer
@rule      ^http://ping\.proxy/
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
   hc_static['count']=1
end

function timer ()
   if not hc.offline_on then
      if hc_static['count']<=1 then
         hc_static['count']=1 --ïèíãîâàòü êàæäûå x ìèíóò
         hc.execute_cmd('LoadURL http://ping.proxy/')
      else hc_static['count']=hc_static['count']-1   
      end
   else hc_static['count']=1   
   end
   
end

function GetAnswerCode(s)
  _,_,x = string.find(s, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
   hc.use_proxy="127.0.0.1:8288" --Âíåøèíé ïðîêñè
   hc.request_header="HEAD http://www.google.de/ HTTP/1.0\13\10\13\10"
   hc.monitor_string = hc.monitor_string..'R-Ping '
   hc.call_me_for('BeforeAnswerHeaderSend', 'Answer')
end

function Answer()
   hc.action='dont_save'
   answ_code = GetAnswerCode(hc.answer_header)
   if answ_code==200 then
      hc.use_proxy="127.0.0.1:8288" --GLOBAX
   else hc.use_proxy="127.0.0.1:9202" --SPRINT
   end
   hc.monitor_string = hc.monitor_string..'A-Ping '
end
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #333 : 14 марта 2012, 15:55:49 »

Задавайте вопрос конкретно, берегите чужое время.
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #334 : 14 марта 2012, 16:54:48 »

я взял за основу расширение pingProxy.lua мне нужно чтоб внешние прокси автоматом переключались при доступности (например пингует прокси - если он доступен то работает через него, если нет то через второй прокси)

вот что я понаписал

--[[ <HCExtension>
@name          WiiProxy WOW III
@author        igorek
@version       0.2
@description   Ïðîâåðèòü ïðîêñè
@event      Init/init
@event      Timer1m/timer
@rule      ^http://ping\.proxy/
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
   hc_static['count']=1
end

function timer ()
   if not hc.offline_on then
      if hc_static['count']<=1 then
         hc_static['count']=1 --ïèíãîâàòü êàæäûå x ìèíóò
         hc.execute_cmd('LoadURL http://ping.proxy/')
      else hc_static['count']=hc_static['count']-1
      end
   else hc_static['count']=1
   end

end

function GetAnswerCode(s)
  _,_,x = string.find(s, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
   local s = s
   hc.use_proxy="127.0.0.1:8288" --Âíåøèíé ïðîêñè
   hc.request_header="HEAD http://www.google.de/ HTTP/1.0\13\10\13\10"
   hc.monitor_string = hc.monitor_string..'R-Ping '
   hc.call_me_for('BeforeAnswerHeaderSend', 'Answer')
end

function Answer()
   hc.action='dont_save'
   answ_code = GetAnswerCode(hc.answer_header)
   if answ_code==200 then
   s = 0
   else s = 1
    end   
   hc.monitor_string = hc.monitor_string..'A-Ping '
end


function Request()
    if s==0 then
   hc.use_proxy="127.0.0.1:9202" --SPRINT
   hc.monitor_string = hc.monitor_string..'SPRINT '
    end
    if s==1 then
   hc.use_proxy="127.0.0.1:8288" --GLOBAX
   hc.monitor_string = hc.monitor_string..'GLOBAX '
    end
end



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

function Request()
    if s==0 then
   hc.use_proxy="127.0.0.1:9202" --SPRINT
   hc.monitor_string = hc.monitor_string..'SPRINT '
    end
    if s==1 then
   hc.use_proxy="127.0.0.1:8288" --GLOBAX
   hc.monitor_string = hc.monitor_string..'GLOBAX '
    end
end


все сразу втупляет.

Уважаемый mail62 помогите.
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #335 : 14 марта 2012, 17:22:36 »

Делайте отладочный вывод сообщений в лог функцией hc.put_to_log(), поймете на каком шаге втупляет. Сделайте сначала вывод сообщений в обработчиках событий, чтобы понять какие события срабатывают, а какие нет.
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #336 : 14 марта 2012, 17:40:24 »

это в расширение надо добавить
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #337 : 15 марта 2012, 03:00:40 »

Конечно, в расширение.
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #338 : 15 марта 2012, 08:37:05 »

 и он будет в общий лог писать?
и как написать в расширении?
и где можно почитать о переменных в луа(как присвоить) в Extensions ничего об этом ненашол в интернете тож не че недогоняю, мнеб пример расширения где с переменными работают (присваевают и отрабатывают присвоенное значение)
Сообщить модератору   Записан
Норкин Евгений
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 22


« Ответ #339 : 15 марта 2012, 09:52:09 »

--[[ <HCExtension>
@name          PingProxyMOD
@author        igorek
@version       0.2
@description   Ïðîâåðèòü äîñòóïíîñòü âíåøíåãî ïðîêñè
@rule      ^http://ping\.proxy/
@event      Init/init
@event      Timer1m/timer
@event         RequestHeaderReceived/Request
</HCExtension> ]]

function init()
      hc.put_to_log()
      hc_static['count']=1
end

function timer ()
   if not hc.offline_on then
      if hc_static['count']<=1 then
         hc_static['count']=1 --ïèíãîâàòü êàæäûå x ìèíóò
         hc.execute_cmd('LoadURL http://ping.proxy/')
      else hc_static['count']=hc_static['count']-1   
      end
   else hc_static['count']=1   
   end
   
end

function GetAnswerCode(s)
  _,_,x = string.find(s, 'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

function Request()
   hc.use_proxy="127.0.0.1:9202" --Âíåøèíé ïðîêñè
   hc.request_header="HEAD http://www.google.de/ HTTP/1.0\13\10\13\10"
   hc.monitor_string = hc.monitor_string..'R-Ping '
   hc.call_me_for('BeforeAnswerHeaderSend', 'Answer')
end
   
function Answer()
   hc.action='dont_save'
   answ_code = GetAnswerCode(hc.answer_header)
       if answ_code==200 then prox=1
       else prox=2
       end
   hc.monitor_string = prox
end





в логе такая строка
15.03.12 16:49:12,062 # 114 <<< URL: http://www.google.de/
R-SCRIPT "Request" ERROR:
[string "?"]:11: 'then' expected near '='

15.03.12 16:49:12,062 # 114:  Connect to proxy from script: (127.0.0.1:9202)

и что такое r-script у меня в расширениях токого нету
Сообщить модератору   Записан
Страниц: 1 ... 15 16 [17] 18 19 ... 29   Вверх
  Отправить эту тему    Печать  

 
Перейти в: