+  HandyCache форум
|-+  Главная категория» Общие вопросы» Расширения на языке Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: 1 ... 23 24 [25] 26 27 ... 29   Вниз
  Отправить эту тему    Печать  
Автор Тема: Расширения на языке Lua в HandyCache  (Прочитано 438302 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #480 : 23 января 2013, 13:27:47 »

Пока я не вижу причин ломать это, раз уж оно сейчас работает. Вообще предполагалось, что работа с заголовком будет в обработчике события RequestHeaderReceived или BeforeRequestHeaderSend.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #481 : 23 января 2013, 20:05:16 »

Цитировать
не вижу причин ломать
И не стоит Улыбка Может кто-то найдёт и другие применения, но одно уже можно использовать:
при загрузке содержимого страницы (в FireFox), запросы в поле "Accept" содержат формат ресурса, что иногда может пригодиться и после получения ответа. Например, при блокировании или отсутствии картинки можно заменить её именно картинкой.
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #482 : 23 января 2013, 20:53:24 »

Написал в HCExtensions.html, что можно request_header доступен для чтения в этом обработчике.
Сообщить модератору   Записан
Zoynels
Новичок
*

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

Сообщений: 42


« Ответ #483 : 26 января 2013, 07:08:16 »

Есть скрипт:
Код:
--[[ <HCExtension>
@name          caching
@author        zoynels@yandex.ru
@version       0.01
@description   caching
@rule          bits\.wikimedia\.org/
@event URLToFileNameConverting/conv
</HCExtension> ]]



function conv()

 if not conv_url then conv_url = {} end
 local url = conv_url[hc.monitor_index] or hc.url

  hc.put_to_log('url: ' .. url)
local cache_file_name = hc.prepare_url(url,false)
hc.put_to_log('Cache_file_name:' .. cache_file_name)
hc.preform_cache_file_name(cache_file_name)
hc.monitor_string = hc.monitor_string .. ', Cache Extention ' .. cache_file_name
conv_url[hc.monitor_index] = url

end

при запросе URL например
http://bits.wikimedia.org/ru.wikipedia.org/load.php?debug=false&lang=ru&modules=ext.flaggedRevs.basic%7Cext.gadget.collapserefs%2CdirectLinkToCommons%2Cpreview%2CreferenceTooltips%7Cext.wikihiero%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmw.PopUpMediaTransform%7Cskins.vector&only=styles&skin=vector&*

в логе выходят сообщения:
Цитировать
26.01.13 09:07:09,703 # 0 -=< MESSAGE FROM EXTENSION >=- C:\[F]\HandyCache\Extensions\Wikipedia\w12.txt
url: http://bits.wikimedia.org/ru.wikipedia.org/load.php?debug=false&lang=ru&modules=ext.flaggedRevs.basic%7Cext.gadget.collapserefs%2CdirectLinkToCommons%2Cpreview%2CreferenceTooltips%7Cext.wikihiero%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmw.PopUpMediaTransform%7Cskins.vector&only=styles&skin=vector&*

26.01.13 09:07:09,703 # 0 -=< MESSAGE FROM EXTENSION >=- C:\[F]\HandyCache\Extensions\Wikipedia\w12.txt
Cache_file_name:bits.wikimedia.org\ru.wikipedia.org\load.php^\D1F2CEC0


проблема собственно в имени файла "D1F2CEC0" которое записывается на диск и потом узнать по данному имени что за URL запрашивался не представляется возможным, это ошибка или так и должно быть? и если это всё таки должно быть именно так, то как можно получить читабельное имя?
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #484 : 26 января 2013, 13:01:39 »

В файловой системе есть ограничение на длину полного имени файла в 250 байт. Когда имя файла получается длинным, как в Вашем случае, часть имени файла заменяется MD5-хэшем. Восстановить из хэша измененную часть уже нельзя.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #485 : 02 февраля 2013, 16:54:21 »

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

Первое расширение срабатывает и выдаёт заданную картинку, но выводит в монитор строку зелёного цвета (пробовались различные варианты заголовков ответа для hc.answer_header).

Код:
--[[ <HCExtension>
@name          ### Temp-1 ###
@event         BeforeRequestHeaderSend/T001
</HCExtension> ]]


function T001()
if re.find(hc.request_header, [[^Accept: text/html,]]) then return
else
hc.action = 'stop'
end
hc.answer_header = 'HTTP/1.1 403 lock (R-ext-FF)\r\nConnection: Close\r\nContent-Type: image/png\r\n\r\n'
hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
hc.monitor_string = hc.monitor_string..'R-ext-FF '
end

Второе расширение срабатывает, выводит в монитор строку как для заблокированного (красную), но отдаёт браузеру пустую строку (ни заданной картинки, ни картинки заданной для чёрного списка).
* При проверке использовались копии одной и той же картинки, но с разными именами.

Код:
--[[ <HCExtension>
@name          ### Temp-2 ###
@event         BeforeRequestHeaderSend/T001
</HCExtension> ]]


function body()
-- if not hc.last_part then
hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
-- end
hc.put_to_log('B - '..hc.answer_body)
end


function T001()

local function Stop()
if re.find(hc.request_header, [[^Accept: text/html,]]) then return
else
   hc.call_me_for('BeforeAnswerBodySend', 'body') end
   hc.action = 'stop'
   hc.monitor_string = hc.monitor_string..'R-ext-FF '
end

if not re.find(hc.request_header, [[^Referer:]]) then return
else
  Stop() -- Блокируем загрузку
end
end
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #486 : 03 февраля 2013, 15:16:37 »

Не могу понять, почему не выдаётся заданная в расширении картинка?
Может кто знает в чём дело?
Цитировать
Изображение «http://nirsoft.net/» не может быть показано, так как содержит ошибки.

В "Чёрном списке" задано "Показывать файл:" 'D:\HandyCache\bHC-i.png'.
Файл 'D:\HandyCache\R-ext-FF.png' является копией этого файла.

Код:
--[[ <HCExtension>
@name          ### Temp ###
@event         BeforeRequestHeaderSend/T001
@event         BeforeAnswerBodySend/body
</HCExtension> ]]

function body()
hc.put_to_log('B1 - '..hc.answer_body)
-- if not hc.last_part then
-- hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
-- end
hc.put_to_log('B2 - '..hc.answer_body)
end

function T001()
hc.action = 'stop'
end

Во вложениях логи использования трёх вариантов расширения:

1.log - строки 9,10,11 закомментированны (по умолчанию).
Браузеры показывают картинку заданную для 'ЧС'.

2.log - строка 10 раскомментированна, строки 9 и 11 закомментированны.
Исходный код страницы в IE8:
Код:
file=D:\HandyCache\R-ext-FF.pngfile=D:\HandyCache\R-ext-FF.png

3.log - строки 9,10,11 раскомментированны.
Исходный код страницы в IE8:
Код:
file=D:\HandyCache\R-ext-FF.png

* 1.log (1.3 Кб - загружено 88 раз.)
* 2.log (1.35 Кб - загружено 83 раз.)
* 3.log (1.32 Кб - загружено 83 раз.)
Сообщить модератору   Записан
mirny
Пользователь
**

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

Сообщений: 84


« Ответ #487 : 03 февраля 2013, 16:40:51 »

> hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png'
Сударь, вы фееричны. Читайте про I/O в Луа. Я верю что это поможет.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #488 : 03 февраля 2013, 17:14:21 »

Цитировать
верю что это поможет
С англиЦким не дружу, потому вера безосновательна.
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #489 : 03 февраля 2013, 17:29:23 »

Читайте внимательно HCExtensions.html.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #490 : 03 февраля 2013, 18:11:14 »

Цитата: HCExtensions.html
Переменные таблицы hc, доступные в расширениях
  • Имя                 Доп.действия       События                         Доп.значения
  • answer_body    чтение, запись     BeforeAnswerBodySend    "file=<имя файла>"
Что не так? Может кто просто выложит рабочий пример?
Добавлено: 03 Февраль 2013, 17:53:08

И почему в первом расширении, несколькими постами выше, эта строка работала?
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #491 : 03 февраля 2013, 18:45:56 »

Цитировать
Что не так?

1. Судя по Вашему примеру, это баг НС или неправильное описание в HCExtensions.html.
Согласно описанию, hc.answer_body= 'file=D:\\HandyCache\\R-ext-FF.png' должно грузить файл, а не саму эту строку.
mai62, а если файла нет, что должен выдать НС в переменную hc.answer_body?

2. Если б все отмеченное в п.1 работало правильно, все равно результат был бы ошибочным. Надо очищать hc.answer_body в каждом куске ответа кроме последнего:
hc.answer_body = hc.last_part and 'file=E:\\Progr\\HandyCache\\R-ext-FF.png' or ''
Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #492 : 03 февраля 2013, 19:19:41 »

olDjeka

1. В обработчике BeforeAnswerBodySend переменной hc.answer_body нельзя присвоить имя файла, там она воспринимается как порция данных (кусок тела).

2. В других обработчиках (кроме BeforeRequestBodySend и BeforeAnswerBodySend) hc.answer_body должна идти в паре с hc.answer_header, иначе она игнорируется.

3. Использовать hc.action = 'stop' вместе с тандемом (hc.answer_header + hc.answer_body) крайне не желательно. В некоторых событиях hc.action будет в приоритете и HC отдаст браузеру свой ответ.
« Последнее редактирование: 03 февраля 2013, 19:43:19 от DenZzz » Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #493 : 03 февраля 2013, 20:07:35 »

Михаил, спасибо.
Только не совсем понял последняю строку, вернее пока совсем не понял Смущен
DenZzz, бладарю за подробное объяснение, пойду думать как "выкрутится" Улыбка
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #494 : 03 февраля 2013, 20:31:42 »

Цитировать
Только не совсем понял последняю строку
Это более короткая запись такого фрагмента:
if hc.last_part then
   hc.answer_body = 'file=E:\\Progr\\HandyCache\\R-ext-FF.png'
else
   hc.answer_body = ''
end
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #495 : 03 февраля 2013, 20:46:17 »

Михаил Отлично!
Но мне бы стандартные то научится понимать Непонимаю
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #496 : 10 февраля 2013, 18:29:31 »

Почему  Непонимаю Если stop используется во время RequestHeaderReceived или BeforeRequestHeaderSend, то
строка монитора меняется.
Код:
10.02.2013/17:41:32 local/127.0.0.1 http://ya.ru/gfeg.5gtr 0 0/73 0 0 "430 lock (A-40X)"

Если во время AnswerHeaderReceived, то нет.
Код:
10.02.2013/17:50:51 local/127.0.0.1 http://ya.ru/gfeg.5gtr 4373 4373/585 100% 331 "403 Forbidden (HC)"

Код:
--[[ <HCExtension>
@name ### Temp ###
@rule \Ahttp://ya\.ru
@event AnswerHeaderReceived/Stop
@event BeforeAnswerHeaderSend
</HCExtension> ]]

function BeforeAnswerHeaderSend()
hc.answer_header = 'HTTP/1.1 430 lock (A-40X)\r\nConnection: Close\r\nContent-Type: text/html\r\n\r\n'
end

function Stop()
hc.action = 'stop'
end

Перед проверкой все другие расширения были отключены.

p.s. В версии 409 ещё и заголовок ответа менялся временно, только до BeforeAnswerBodySend (во время события выдавался пустой).
« Последнее редактирование: 10 февраля 2013, 18:40:54 от olDjeka » Сообщить модератору   Записан
GregoryPek
Новичок
*

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

Сообщений: 48


« Ответ #497 : 11 февраля 2013, 14:44:50 »

Всем привет, у меня вот вопрос ламерский (все инструкции прочитал, ответа не нашел):

- ищу аналог "window.location.href" , есть здесь такое? чем заменить можно? 
Сообщить модератору   Записан
Anymore
Beta tester
*****

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

Сообщений: 339


« Ответ #498 : 11 февраля 2013, 14:53:29 »

hc.url, это написано в HCExtensions.html
Сообщить модератору   Записан
GregoryPek
Новичок
*

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

Сообщений: 48


« Ответ #499 : 11 февраля 2013, 14:55:29 »

hc.url, это написано в HCExtensions.html
hc.url меняется во время загрузки страницы, а "window.location.href" нет
Сообщить модератору   Записан
Страниц: 1 ... 23 24 [25] 26 27 ... 29   Вверх
  Отправить эту тему    Печать  

 
Перейти в: