forked from midou/invidious
allow multiple, successive content-encodings
This commit is contained in:
parent
2c447a42f2
commit
ba48f68fc3
@ -434,11 +434,22 @@ module YoutubeAPI
|
|||||||
# - https://github.com/iv-org/invidious/issues/2612
|
# - https://github.com/iv-org/invidious/issues/2612
|
||||||
# - https://github.com/crystal-lang/crystal/issues/11354
|
# - https://github.com/crystal-lang/crystal/issues/11354
|
||||||
#
|
#
|
||||||
case response.headers["Content-Encoding"]?
|
if encodings = response.headers["Content-Encoding"]?
|
||||||
when "gzip"
|
io = response.body_io
|
||||||
body = Compress::Gzip::Reader.new(response.body_io, sync_close: true)
|
|
||||||
when "deflate"
|
# Multiple encodings can be combined, and are listed in the order
|
||||||
body = Compress::Deflate::Reader.new(response.body_io, sync_close: true)
|
# in which they were applied. E.g: "deflate, gzip" means that the
|
||||||
|
# content must be first "gunzipped", then "defated".
|
||||||
|
encodings.split(',').reverse.each do |enc|
|
||||||
|
case enc.strip(' ')
|
||||||
|
when "gzip"
|
||||||
|
io = Compress::Gzip::Reader.new(io, sync_close: true)
|
||||||
|
when "deflate"
|
||||||
|
io = Compress::Deflate::Reader.new(io, sync_close: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
body = io.gets_to_end
|
||||||
else
|
else
|
||||||
body = response.body
|
body = response.body
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user