+  HandyCache форум
|-+  Последние сообщения
Имя пользователя:
Пароль:

Страниц: 1 2 [3] 4 5 ... 10
 21 
 : 05 Август 2018, 23:43:32 
Автор Terfe - Последний ответ от kichrot
После того, как расширение научилось давать файлам в кэше стандартные расширения вылезла проблема связанная с конфликтом со списками и другими расширениями. Но вроде бы решил проблему.
Выкладываю доработанную версию расширения:

Код:
--[[ <HCExtension>
@name          Длина, дата последнего изменения и тип содержимого, как имя файла (LDTFN)
@author         bdstd, kichrot
@version        2.2.6
@rule           imgprx.livejournal.net/
@event          BeforeViewInMonitor
</HCExtension> ]]



function cacheable()
        if
        re.find(hc.url, [[\&begin=(?!0)[0-9]+]]) or
        re.find(hc.url, [[redirector]]) or
        re.find(hc.url, [[^htt[ps]+://\d+\.\d+\.\d+\.\d+.*]]) or
        re.find(hc.url, [[(\?|\&)(start|starttime)=\d+\.\d+]])
        then
                return false
        else
                if re.find(hc.answer_header, [[HTTP/1.1\s200]]) or re.find(hc.answer_header, [[^HTTP/1.1\s206.*?Content\-Range:\sbytes\s0-.*]]) then
                        return true
                else
                        return false
                end
        end
end

function GetContentType(s)
  _,_,x = string.find(s, '[cC]ontent%-[tT]ype: *([^;\r\n]+)')
  if x~=nil then x = string.lower(x) end
  return x
end

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 GetLastModified(d)
 x = re.find(d, [[^[lL]ast-[mM]odified:\s]])
  --  hc.put_msg(x)
 if  x then
      x = re.find(d, [[^[lL]ast-[mM]odified:\s([^\r\n]+)]])
      x = re.replace(x, [[[lL]ast-[mM]odified:\s]], '', true) 
      x = re.replace(x, [[([\s,:])]], '', true)
      return x
  else
       return -1
  end
end

function get_id()
        hc.white_mask="ЗНП"
        hc.action = 'dont_save'
        hc.client_disconnect()
        hc.hide_in_active_list = true
        hc.hide_in_monitor = true
        if cacheable()==true then
                local z = GetLastModified(hc.answer_header)        -- Забираем время последнего изменения файла из заголовка 'Last-Modified'
local x1 = GetContentLength(hc.answer_header)    -- Забираем размер файла из заголовка 'Content-Length'
local x2 = x1 ..  '_' .. z
local y1 = GetContentType(hc.answer_header)       -- Забираем тип файла из заголовка 'Content-Type'
-- local y2 = re.replace(y1,  [[([/])]], '_', true)
local y2 = re.replace(y1, [[(.+?(?=/)+/)]], '', true)   
-- hc.put_msg(y2)
if x2 and y2 then
                       hc.set_global(hc.url, 'x-hc='..x2..'.'..y2)
       hc.white_mask="Н"
else
                        hc.set_global(hc.url, 'reset')
                end
        else
                hc.set_global(hc.url, 'reset')
        end
end

function conv()
        local x = hc.url
        local x = re.replace(x, [[dropboxusercontent]], 'dropbox')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[/]], '\\', true)
        hc.preform_cache_file_name(x)
        -- hc.put_msg(x)
end

function saver()
        if cacheable()==true then
                hc.action = 'save'
                hc.monitor_string = 'LDTFN-Saving_Content'
        end
end

function hit_check()
        if hc.cache_file_name=='' then
                hc.call_me_for('AnswerHeaderReceived', 'saver')
        else
                hc.white_mask="З"
                hc.action = 'dont_update'
                hc.monitor_string = 'LDTFN-Cache'
        end
end


function BeforeViewInMonitor()

        local x = hc.url
        if re.match(hc.request_header, [[^X\-Via:\sHandyCache\r\n]]) then
                hc.request_header = re.replace(hc.request_header, [[^X\-Via:\sHandyCache\r\n]], nil)
                hc.monitor_string = 'LDTFN-getting_id'
                hc.call_me_for('AnswerHeaderReceived', 'get_id')
        else
                hc.white_mask = 'W'
                local xdomain = re.replace(x, [[^.*?//(.*?)/.*]], '\\1')
                local xget = hc.request_header
                -- local xget = re.replace(xget, [[GET]], 'HEAD') -- beberapa webserver menolak jika menggunakan request method head
                local xget = re.replace(xget, [[^Range:.*?\r\n]], nil)
                local xget = re.replace(xget, [[\r\n\r\n]], '\r\nX-Via: HandyCache\r\n\r\n')
                local xtunnel = 'CONNECT '..xdomain..':443 HTTP/1.1\r\nHost: '..xdomain..'\r\nUser-Agent: HandyCache\r\nConnection: keep-alive\r\n\r\n'
                if re.find(hc.url, [[^https://]]) then
                        hc.send_request(xget, '', xtunnel)
                else
                        hc.send_request(xget)
                end
                repeat
                        hc.sleep(50)
                        if hc.client_connected=='false' then hc.set_global(x, 'reset') end
                until hc.get_global(x)~=nil
                if hc.get_global(x)=='reset' then
                        hc.set_global(x, nil)
                else
          hc.white_mask="Н"
                        if re.find(x, [[\?]]) then
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1&'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        else
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1?'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        end
                end
                hc.set_global(x, nil)
        end
end

 22 
 : 04 Август 2018, 19:48:53 
Автор Terfe - Последний ответ от kichrot
Можно узнать, в чем великий эротический смысл этого действа? Почему нельзя оставить родное расширение?

Почесал репу, подумал и исправил указанную Вами порнографию.
Теперь имена файлов в кэше получают нормальные стандартные расширения.
Выкладываю исправленную версию:

Код:
--[[ <HCExtension>
@name          Длина, дата последнего изменения и тип содержимого, как имя файла (LDTFN)
@author         bdstd, kichrot
@version        2.2.5
@exception      upload
@exception      /videoplayback\?.*\&range=
@exception      s.ytimg.com/
@rule           imgprx.livejournal.net/
@rule           .*ytimg.com/
@rule           yt3.ggpht.com/
@event          BeforeViewInMonitor
</HCExtension> ]]



function cacheable()
        if
        re.find(hc.url, [[\&begin=(?!0)[0-9]+]]) or
        re.find(hc.url, [[redirector]]) or
        re.find(hc.url, [[^htt[ps]+://\d+\.\d+\.\d+\.\d+.*]]) or
        re.find(hc.url, [[(\?|\&)(start|starttime)=\d+\.\d+]])
        then
                return false
        else
                if re.find(hc.answer_header, [[HTTP/1.1\s200]]) or re.find(hc.answer_header, [[^HTTP/1.1\s206.*?Content\-Range:\sbytes\s0-.*]]) then
                        return true
                else
                        return false
                end
        end
end

function GetContentType(s)
  _,_,x = string.find(s, '[cC]ontent%-[tT]ype: *([^;\r\n]+)')
  if x~=nil then x = string.lower(x) end
  return x
end

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 GetLastModified(d)
 x = re.find(d, [[^[lL]ast-[mM]odified:\s]])
  --  hc.put_msg(x)
 if  x then
      x = re.find(d, [[^[lL]ast-[mM]odified:\s([^\r\n]+)]])
      x = re.replace(x, [[[lL]ast-[mM]odified:\s]], '', true) 
      x = re.replace(x, [[([\s,:])]], '', true)
      return x
  else
       return -1
  end
end

function get_id()
        hc.action = 'dont_save'
        hc.client_disconnect()
        hc.hide_in_active_list = true
        hc.hide_in_monitor = true
        if cacheable()==true then
                local z = GetLastModified(hc.answer_header)        -- Забираем время последнего изменения файла из заголовка 'Last-Modified'
local x1 = GetContentLength(hc.answer_header)    -- Забираем размер файла из заголовка 'Content-Length'
local x2 = x1 ..  '_' .. z
local y1 = GetContentType(hc.answer_header)       -- Забираем тип файла из заголовка 'Content-Type'
local y2 = re.replace(y1, [[(.+?(?=/)+/)]], '', true)
if x2 and y2 then
                        hc.set_global(hc.url, 'x-hc='..x2..'.'..y2)
                else
                        hc.set_global(hc.url, 'reset')
                end
        else
                hc.set_global(hc.url, 'reset')
        end
end

function conv()
        local x = hc.url
        local x = re.replace(x, [[dropboxusercontent]], 'dropbox')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[/]], '\\', true)
        hc.preform_cache_file_name(x)
        -- hc.put_msg(x)
end

function saver()
        if cacheable()==true then
                hc.action = 'save-'
                hc.monitor_string = 'LDTFN-Saving_Content'
        end
end

function hit_check()
        if hc.cache_file_name=='' then
                hc.call_me_for('AnswerHeaderReceived', 'saver')
        else
                hc.action = 'dont_update-'
                hc.monitor_string = 'LDTFN-Cache'
        end
end


function BeforeViewInMonitor()
        local x = hc.url
        if re.match(hc.request_header, [[^X\-Via:\sHandyCache\r\n]]) then
                hc.request_header = re.replace(hc.request_header, [[^X\-Via:\sHandyCache\r\n]], nil)
                hc.monitor_string = 'LDTFN-getting_id'
                hc.call_me_for('AnswerHeaderReceived', 'get_id')
        else
                hc.white_mask = 'W'
                local xdomain = re.replace(x, [[^.*?//(.*?)/.*]], '\\1')
                local xget = hc.request_header
                -- local xget = re.replace(xget, [[GET]], 'HEAD') -- beberapa webserver menolak jika menggunakan request method head
                local xget = re.replace(xget, [[^Range:.*?\r\n]], nil)
                local xget = re.replace(xget, [[\r\n\r\n]], '\r\nX-Via: HandyCache\r\n\r\n')
                local xtunnel = 'CONNECT '..xdomain..':443 HTTP/1.1\r\nHost: '..xdomain..'\r\nUser-Agent: HandyCache\r\nConnection: keep-alive\r\n\r\n'
                if re.find(hc.url, [[^https://]]) then
                        hc.send_request(xget, '', xtunnel)
                else
                        hc.send_request(xget)
                end
                repeat
                        hc.sleep(50)
                        if hc.client_connected=='false' then hc.set_global(x, 'reset') end
                until hc.get_global(x)~=nil
                if hc.get_global(x)=='reset' then
                        hc.set_global(x, nil)
                else
                        if re.find(x, [[\?]]) then
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1&'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        else
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1?'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        end
                end
                hc.set_global(x, nil)
        end
end

 23 
 : 04 Август 2018, 18:10:47 
Автор Terfe - Последний ответ от Zork
А откуда HandyCache/Version 1.00 RC4 (1.0.0.833), если на сайте последняя HandyCache RC4 1.0.0.700 ?

 24 
 : 04 Август 2018, 14:54:49 
Автор Terfe - Последний ответ от kichrot
Можно узнать, в чем великий эротический смысл этого действа? Почему нельзя оставить родное расширение?

Попытаюсь обосновать.

Возьмем два примера заголовков запросов браузера и ответов сервера:

1)
http://imgprx.livejournal.net/337edab331ea43fc35777cf0bb4774596402a46d/1keziXqj4zh9nezCiCQjkfcsFVcK9yq6cFQG1ip_yEAX0-J-SdJErtxXn2wAEuWzL_UHq9WsNey5rPnGvSTGNBp5KodlCWVM9dmLHSfQSkjVVuLrzia9z6lKImSNNsoZyWFQVEeFOTFNCTZIfhGUCw

GET /337edab331ea43fc35777cf0bb4774596402a46d/1keziXqj4zh9nezCiCQjkfcsFVcK9yq6cFQG1ip_yEAX0-J-SdJErtxXn2wAEuWzL_UHq9WsNey5rPnGvSTGNBp5KodlCWVM9dmLHSfQSkjVVuLrzia9z6lKImSNNsoZyWFQVEeFOTFNCTZIfhGUCw HTTP/1.1
Host: imgprx.livejournal.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

HTTP/1.1 200 OK
Server: HandyCache/Version 1.00 RC4 (1.0.0.833)
Content-Length: 122814
Connection: Keep-alive
Last-Modified: Sat, 04 Aug 2018 11:44:30 GMT
Content-Type: image/png

2)
http://imgprx.livejournal.net/07b0c8dd551a0edf3d662b2a9d85944ab288ac6b/uRegMDGRz-WDc80QTfat7Gl1ghiMCL7L1YIC7SEryR6CprmSKITT94HqQ1Q_Bl5p35mvP1r-WjbP0uTojE7OEGIfu8CQfRZk2ciVUnB4eq2M0KlZ-mILDphBQMPiBIwVnYtJHkNWqHTFPRNPDc081rvICLReqIAHmq3KGVycvw-sYnMZ2-QzahuHQsaShaj8V4J4EnpLBgNuS5xtqfhuCE-VD_EuW7HMNNJvdD06wj4

GET /07b0c8dd551a0edf3d662b2a9d85944ab288ac6b/uRegMDGRz-WDc80QTfat7Gl1ghiMCL7L1YIC7SEryR6CprmSKITT94HqQ1Q_Bl5p35mvP1r-WjbP0uTojE7OEGIfu8CQfRZk2ciVUnB4eq2M0KlZ-mILDphBQMPiBIwVnYtJHkNWqHTFPRNPDc081rvICLReqIAHmq3KGVycvw-sYnMZ2-QzahuHQsaShaj8V4J4EnpLBgNuS5xtqfhuCE-VD_EuW7HMNNJvdD06wj4 HTTP/1.1
Host: imgprx.livejournal.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

HTTP/1.1 200 OK
Server: HandyCache/Version 1.00 RC4 (1.0.0.833)
Content-Length: 22334
Connection: Keep-alive
Last-Modified: Sat, 04 Aug 2018 11:44:28 GMT
Content-Type: image/webp


Как Вы можете наблюдать, сервер выдает файлы вообще без расширений.
Конечно, можно написать код, который будет, на основании заголовков ответа сервера, формировать расширения файлов стандартного вида. Но зачем??? Это только приведет к усложнению кода расширения HC.
Если Вам так необходимо, то ни кто и ни  что не мешает изменить код расширения на требуемый Вам.

 25 
 : 04 Август 2018, 10:22:44 
Автор Terfe - Последний ответ от LordMerlin
В качестве расширения файла используется значение 'Content-Type' из заголовка ответа сервера.
Можно узнать, в чем великий эротический смысл этого действа? Почему нельзя оставить родное расширение?

 26 
 : 03 Август 2018, 19:26:35 
Автор Terfe - Последний ответ от kichrot
Помещаю последнюю версию расширения.
Изменения:
1) имя файла в кеше формируется из значений 'Content-Length' и 'Last-Modified' содержащихся в заголовке ответа сервера. Если одного из этих значений в заголовке ответа сервера нет, то оно заменяется на "-1". В качестве расширения файла используется значение 'Content-Type' из заголовка ответа сервера. Примеры имен файлов в кеше, образуемых расширением, на основе содержимого заголовка ответа сервера:
- "727617_Fri20Jul2018205327GMT.image_png"
- "297011_-1.image_jpeg"
- "-1_Mon16Jul2018093938GMT.image_jpeg"
В результате такой политики, образования имен файлов, степень идентификации файлов в кэше существенно увеличивается, а вероятность совпадения имен у различных файлов существенно уменьшается.
2) исправлена ошибка в коде приводящая к записи в кеш пустых каталогов.

Код:
--[[ <HCExtension>
@name          Длина/дата последнего изменения и тип содержимого, как имя файла (LDTFN)
@author         bdstd, kichrot
@version        2.2.4
@exception      upload
@exception      /videoplayback\?.*\&range=
@exception      s.ytimg.com/
@rule           fbsbx\.com/file\_download\.php\?id=[^&]+\&.*
@rule           4shared.*/download/.*?\?tsid=.*
@rule           reverbnation\.com/audio\_player/ec
@rule           imgprx.livejournal.net/
@rule           .*ytimg.com/
@rule           yt3.ggpht.com/
@event          BeforeViewInMonitor
</HCExtension> ]]



function cacheable()
        if
        re.find(hc.url, [[\&begin=(?!0)[0-9]+]]) or
        re.find(hc.url, [[redirector]]) or
        re.find(hc.url, [[^htt[ps]+://\d+\.\d+\.\d+\.\d+.*]]) or
        re.find(hc.url, [[(\?|\&)(start|starttime)=\d+\.\d+]])
        then
                return false
        else
                if re.find(hc.answer_header, [[HTTP/1.1\s200]]) or re.find(hc.answer_header, [[^HTTP/1.1\s206.*?Content\-Range:\sbytes\s0-.*]]) then
                        return true
                else
                        return false
                end
        end
end

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 GetLastModified(d)
 x = re.find(d, [[^[lL]ast-[mM]odified:\s]])
  --  hc.put_msg(x)
 if  x then
      x = re.find(d, [[^[lL]ast-[mM]odified:\s([^\r\n]+)]])
      x = re.replace(x, [[[lL]ast-[mM]odified:\s]], '', true) 
      x = re.replace(x, [[([\s,:])]], '', true)
      return x
  else
       return -1
  end
end

function get_id()
        hc.action = 'dont_save'
        hc.client_disconnect()
        hc.hide_in_active_list = true
        hc.hide_in_monitor = true
        if cacheable()==true then
                local z = GetLastModified(hc.answer_header)        -- Забираем время последнего изменения файла из заголовка 'Last-Modified'
local x1 = GetContentLength(hc.answer_header)    -- Забираем размер файла из заголовка 'Content-Length'
local x2 = x1 ..  '_' .. z
  local y1 = re.find(hc.answer_header, [[^Content\-Type:\s[a-zA-Z0-9\-\_]+/[a-zA-Z0-9\-\_]+.*?\r\n]])
                local y2 = re.replace(y1, [[^Content\-Type:\s([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+).*?\r\n]], '\\1_\\2')
-- hc.put_msg(x2)
            if x2 and y2 then
                        hc.set_global(hc.url, 'x-hc='..x2..'.'..y2)
                else
                        hc.set_global(hc.url, 'reset')
                end
        else
                hc.set_global(hc.url, 'reset')
        end
end

function conv()
        local x = hc.url
        local x = re.replace(x, [[dropboxusercontent]], 'dropbox')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[/]], '\\', true)
        hc.preform_cache_file_name(x)
        -- hc.put_msg(x)
end

function saver()
        if cacheable()==true then
                hc.action = 'save-'
                hc.monitor_string = 'LDTFN-Saving_Content'
        end
end

function hit_check()
        if hc.cache_file_name=='' then
                hc.call_me_for('AnswerHeaderReceived', 'saver')
        else
                hc.action = 'dont_update-'
                hc.monitor_string = 'LDTFN-Cache'
        end
end


function BeforeViewInMonitor()
        local x = hc.url
        if re.match(hc.request_header, [[^X\-Via:\sHandyCache\r\n]]) then
                hc.request_header = re.replace(hc.request_header, [[^X\-Via:\sHandyCache\r\n]], nil)
                hc.monitor_string = 'LDTFN-getting_id'
                hc.call_me_for('AnswerHeaderReceived', 'get_id')
        else
                hc.white_mask = 'W'
                local xdomain = re.replace(x, [[^.*?//(.*?)/.*]], '\\1')
                local xget = hc.request_header
                -- local xget = re.replace(xget, [[GET]], 'HEAD') -- beberapa webserver menolak jika menggunakan request method head
                local xget = re.replace(xget, [[^Range:.*?\r\n]], nil)
                local xget = re.replace(xget, [[\r\n\r\n]], '\r\nX-Via: HandyCache\r\n\r\n')
                local xtunnel = 'CONNECT '..xdomain..':443 HTTP/1.1\r\nHost: '..xdomain..'\r\nUser-Agent: HandyCache\r\nConnection: keep-alive\r\n\r\n'
                if re.find(hc.url, [[^https://]]) then
                        hc.send_request(xget, '', xtunnel)
                else
                        hc.send_request(xget)
                end
                repeat
                        hc.sleep(50)
                        if hc.client_connected=='false' then hc.set_global(x, 'reset') end
                until hc.get_global(x)~=nil
                if hc.get_global(x)=='reset' then
                        hc.set_global(x, nil)
                else
                        if re.find(x, [[\?]]) then
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1&'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        else
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1?'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        end
                end
                hc.set_global(x, nil)
        end
end

 27 
 : 30 Июль 2018, 21:37:35 
Автор Terfe - Последний ответ от kichrot
Редко, но бывает то, что в заголовке ответа нет Content-Length.
В этом случае для идентификации файла в кэше можно использовать Last-Modified.
Доработал для этой ситуации расширение. Внес в него так же некоторые небольшие изменения для удобства применения:

Код:
--[[ <HCExtension>
@name          Длина/дата последнего изменения и тип содержимого, как имя файла (LTFN)
@author         bdstd, kichrot
@version        2.2.2
@exception      upload
@exception      /videoplayback\?.*\&range=
@exception      s.ytimg.com/
@rule           fbsbx\.com/file\_download\.php\?id=[^&]+\&.*
@rule           4shared.*/download/.*?\?tsid=.*
@rule           reverbnation\.com/audio\_player/ec
@rule           imgprx.livejournal.net/
@rule           .*ytimg.com/
@rule           yt3.ggpht.com/
@event          BeforeViewInMonitor
</HCExtension> ]]


function cacheable()
        if
        re.find(hc.url, [[\&begin=(?!0)[0-9]+]]) or
        re.find(hc.url, [[redirector]]) or
        re.find(hc.url, [[^htt[ps]+://\d+\.\d+\.\d+\.\d+.*]]) or
        re.find(hc.url, [[(\?|\&)(start|starttime)=\d+\.\d+]])
        then
                return false
        else
                if re.find(hc.answer_header, [[HTTP/1.1\s200]]) or re.find(hc.answer_header, [[^HTTP/1.1\s206.*?Content\-Range:\sbytes\s0-.*]]) then
                        return true
                else
                        return false
                end
        end
end

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 get_id()
        if cacheable()==true then
                local x2 = GetContentLength(hc.answer_header)        -- Забираем размер файла из заголовка 'Content-Length'
                local y1 = re.find(hc.answer_header, [[^Content\-Type:\s[a-zA-Z0-9\-\_]+/[a-zA-Z0-9\-\_]+.*?\r\n]])
                local y2 = re.replace(y1, [[^Content\-Type:\s([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+).*?\r\n]], '\\1_\\2')
 
-- если в заголовке нет Content-Length то используем Last-Modified
                if x2 == -1 then
                      local lmdf = re.find(hc.answer_header, [[^Last-Modified:\s([^\r\n]+)]])
                      local lmdf = re.replace(lmdf, [[Last-Modified:\s]], '', true) 
                      local lmdf = re.replace(lmdf, [[([\s,:])]], '', true)       
      x2 = lmdf
      --  hc.put_msg(x2)
                end

if x2 ~= -1 and y2 then
                        hc.set_global(hc.url, 'x-hc='..x2..'.'..y2)
                else
                        hc.set_global(hc.url, 'reset')
                end



        else
                hc.set_global(hc.url, 'reset')
        end
            hc.client_disconnect()
        hc.hide_in_active_list = true
        hc.hide_in_monitor = true
end

function conv()
        local x = hc.url
        local x = re.replace(x, [[dropboxusercontent]], 'dropbox')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[^.*?([a-zA-Z0-9\-]{4,20}\.[a-z]{2,3})(/|:\d+/).*x\-hc=(.*)$]], '!content-length-and-type-as-file-name/\\1/\\3')
        local x = re.replace(x, [[/]], '\\', true)
        hc.preform_cache_file_name(x)
        -- hc.put_msg(x)
end

function hit_check()
        if hc.cache_file_name=='' then
                hc.call_me_for('AnswerHeaderReceived', 'saver')
        else
                hc.action = 'dont_update-'
                hc.monitor_string = 'LTFN-Cache'
        end
end

function saver()
        if cacheable()==true then
                hc.action = 'save-'
                hc.monitor_string = 'LTFN-Saving_Content'
        end
end


function BeforeViewInMonitor()
        local x = hc.url
        if re.match(hc.request_header, [[^X\-Via:\sHandyCache\r\n]]) then
                hc.request_header = re.replace(hc.request_header, [[^X\-Via:\sHandyCache\r\n]], nil)
                hc.monitor_string = 'LTFN-getting_id'
                hc.call_me_for('AnswerHeaderReceived', 'get_id')
        else
                hc.white_mask = 'W'
                local xdomain = re.replace(x, [[^.*?//(.*?)/.*]], '\\1')
                local xget = hc.request_header
                -- local xget = re.replace(xget, [[GET]], 'HEAD') -- некоторый веб-сервер отклоняется, если использует метод метода запроса
                local xget = re.replace(xget, [[^Range:.*?\r\n]], nil)
                local xget = re.replace(xget, [[\r\n\r\n]], '\r\nX-Via: HandyCache\r\n\r\n')
                local xtunnel = 'CONNECT '..xdomain..':443 HTTP/1.1\r\nHost: '..xdomain..'\r\nUser-Agent: HandyCache\r\nConnection: keep-alive\r\n\r\n'
                if re.find(hc.url, [[^https://]]) then
                        hc.send_request(xget, '', xtunnel)
                else
                        hc.send_request(xget)
                end
                repeat
                        hc.sleep(50)
                        if hc.client_connected=='false' then hc.set_global(x, 'reset') end
                until hc.get_global(x)~=nil
                if hc.get_global(x)=='reset' then
                        hc.set_global(x, nil)
                else
                        if re.find(x, [[\?]]) then
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1&'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        else
                                hc.request_header = re.replace(hc.request_header, [[(^GET.*?)(\sHTTP/1.1\r\n)]], '\\1?'..hc.get_global(x)..'\\2')
                                hc.call_me_for('URLToFileNameConverting', 'conv')
                                hc.call_me_for('BeforeRequestHeaderSend', 'hit_check')
                        end
                end
                hc.set_global(x, nil)
        end
end

 28 
 : 23 Июль 2018, 02:12:00 
Автор nameis - Последний ответ от nameis
Александр, благодарю за хорошую новость.

Надеюсь на скорый релиз.

Может быть выложите новую версию с теми изменениями, которые прошли 100% "обкатку", а те изменения, что еще тестируются, выйдут в свет после???

В любом случае, спасибо вам за НС.

З.Ы, А вам, Михаил, благодарность за СМ.

 29 
 : 22 Июль 2018, 17:11:15 
Автор nameis - Последний ответ от YuS
Новая версия в работе.
Отличная новость! Спасибо, что труд не заброшен и программа будет жить дальше!

 30 
 : 22 Июль 2018, 02:13:25 
Автор nameis - Последний ответ от mai62
Новая версия в работе. На данный момент изменения в ней такие:
  • Добавлены  две  опции  в  Очистке  кэша:  Не  удалять  файлы и Удалять в корзину.
  • Добавлены две колонки в Белый список: Расширения и Обработка SSL.
  • В настройках опции DNS-кэша добавлена опция Только запись;
  • Запросы, у которых происходят ошибки при Обработке SSL, обработка SSL автоматически выключается;
  • Оптимизированы формирование сертификатов для Обработки SSL и работа кэша сертификатов.
  • Обновлена библиотека sslcert.dll;
  • В заголовках расширений добавлено поле homepage;
  • Добавлены переменные hc.exe_path, hc.ramcache_disable, hc.cache_file_date_now;
  • Добавлены функции hc.encode_base64, hc.compress, hc.uncompress;
  • В функции hc.get_host_IP добавлен аргумент timeout;

Страниц: 1 2 [3] 4 5 ... 10