1 import requests
, requests_cache
2 from flask
import Flask
, Blueprint
, request
, Response
3 from flask_login
import current_user
5 frontend
= Blueprint('proxy', __name__
)
9 app
.register_blueprint(frontend
)
12 # https://github.com/psf/requests/issues/5612
13 def silence_errors(generator
):
16 except requests
.exceptions
.RequestException
:
19 @frontend.route("/videoplayback")
21 fvip
= request
.args
.get("fvip", "3")
22 mn
= request
.args
.get("mn", "").split(",")[-1]
23 host
= f
"r{fvip}---{mn}.googlevideo.com"
25 REQUEST_HEADERS_WHITELIST
= {
31 RESPONSE_HEADERS_WHITELIST
= {
38 "x-content-type-options",
42 k
:v
for k
,v
in request
.headers
43 if k
.lower() in REQUEST_HEADERS_WHITELIST
45 with requests_cache
.disabled():
46 r
= requests
.get(f
"https://{host}/videoplayback", request
.args
.to_dict(), headers
=req_headers
, stream
=True)
49 k
:v
for k
,v
in r
.headers
.items()
50 if k
.lower() in RESPONSE_HEADERS_WHITELIST
52 response
= Response(silence_errors(r
.iter_content(chunk_size
=8192)), status
=r
.status_code
, headers
=resp_headers
)
53 response
.call_on_close(lambda: r
.close())
57 if __name__
== '__main__':