kita lanjut dari tutorial sebelumnya, yaitu memperbaiki CORS yang error menggunakan extension
jadi nantinya setiap proses don't update akan selalu menyertakan header CORS ini dengan begitu cache bisa dipakai saat diakses
Persiapan
- Pastikan kalian punya text editor untuk mengedit kode
- Buka text editor kalian dan kemudian buat file dengan format lua dan beri nama "YoutubeVideoCors.lua"
- Simpan file tersebut didalam folder Extensions handycache, tujuannya agar file mudah dicari saat ditambahkan
Setelah semua persiapan selesai langsung saja kita menulis kodenya dimulai dari menuliskan tag HCExtension beserta atribut dan nilainya, silahkan masukan kode ini ditext editor
--[[<HCExtension>
@name Youtube Video Cors Inject
@author Belajar
@version v1.0
@min_HC_version 1.0.0.885
@description Inject CORS for Youtube Video
@rule ^.*\.googlevideo\.com\/videoplayback\?.*&itag=.*&lmt=.*&range=.*
@exception live=1&
@event RequestHeaderReceived
</HCExtension>]]
Setelah tag HCExtension dibuat sekarang saatnya kita membuat fungsi Inject, silahkan masukan kode ini setelah dibawah tag HCExtension
function RequestHeaderReceived()
-- mengecekapakah file cache lebih dari 1
if string.len(hc.cache_file_name) >= 1 then
-- jika ada maka memanggil fungsi Inject saat event BeforeAnswerHeaderSend
hc.call_me_for('BeforeAnswerHeaderSend', 'Inject')
end
end
function Inject()
-- mendefinisikan variable
local new_answer_header = hc.answer_header
-- mencari jika di hc.answer_header terdapat nilai access-control-allow-origin
if re.find(hc.answer_header, [[^Access-Control-Allow-Origin:]]) then
-- jika ditemukan maka menghapusnya
new_answer_header = re.replace(new_answer_header, 'Access-Control-Allow-Origin: .*?\r\n', nil)
end
-- jika nilai origin tersedia
if re.match(hc.request_header, [[[oO]rigin:]]) then
--# set cors dari nilai header origin (agar cors menjadi dynamic)
-- misal saat mengujungi youtube.com maka akan set cors ke youtube.com / saat mengunjungi m.youtube.com maka set cors ke m.youtube.com
local origin = re.find(s, '(?-s)(^Origin: (.+))', 2)
build_header = 'Access-Control-Allow-Origin: '..origin..'\r\n'
build_header = build_header..'Access-Control-Allow-Credentials: true\r\n'
build_header = build_header..'Timing-Allow-Origin: '..origin..'\r\n'
build_header = build_header..'Access-Control-Expose-Headers: Client-Protocol, Content-Length, Content-Type, X-Bandwidth-Est, X-Bandwidth-Est2, X-Bandwidth-Est3, X-Bandwidth-App-Limited, X-Bandwidth-Est-App-Limited, X-Bandwidth-Est-Comp, X-Bandwidth-Avg, X-Head-Time-Millis, X-Head-Time-Sec, X-Head-Seqnum, X-Response-Itag, X-Restrict-Formats-Hint, X-Sequence-Num, X-Segment-Lmt, X-Walltime-Ms\r\n'
-- menggabungkan build_header dengan new_answer_header >> set answer_header
hc.answer_header = re.replace(new_answer_header, [[\r\n\r\n]], '\r\n'..build_header..'\r\n')
-- mengirim pesan ke log monitor pada bagian rule
hc.monitor_string = hc.monitor_string.."cors.inject"
else
hc.monitor_string = hc.monitor_string.."cors.missing"
end
end
kemudian simpan filenya, dan menambahkan extension yang dibuat ini kedalam handycache untuk dicoba