From 301f060a7fe35d0682196bad094ef6ff7d9ae5d4 Mon Sep 17 00:00:00 2001 From: girst Date: Thu, 23 Jul 2020 14:23:33 +0200 Subject: [PATCH] use requests for proxy endpoint --- app/proxy/__init__.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/app/proxy/__init__.py b/app/proxy/__init__.py index 2709051..25f62cd 100644 --- a/app/proxy/__init__.py +++ b/app/proxy/__init__.py @@ -1,8 +1,8 @@ -from urllib.request import urlopen, Request +import requests from flask import Flask, Blueprint, request, Response from flask_login import current_user -frontend = Blueprint(__name__.rpartition('.')[2], __name__) +frontend = Blueprint('proxy', __name__) def app(): app = Flask(__name__) @@ -15,23 +15,24 @@ def videoplayback(): mn = request.args.get("mn", "").split(",")[-1] host = f"r{fvip}---{mn}.googlevideo.com" - # cargo-culted from invidious + # cargo-culted from invidious: REQUEST_HEADERS_WHITELIST = {"accept", "accept-encoding", "cache-control", "content-length", "if-none-match", "range"} RESPONSE_HEADERS_BLACKLIST = {"access-control-allow-origin", "alt-svc", "server"} - # NOTE: don't close 'u' (or use 'with'), or reading from it will fail! - # TODO: what to do / how to close socket when the user stops reading? req_headers = { k:v for k,v in request.headers if k.lower() in REQUEST_HEADERS_WHITELIST } - u = urlopen(Request(f"https://{host}/videoplayback?{request.query_string.decode()}", headers=req_headers)) + r = requests.get(f"https://{host}/videoplayback", request.args.to_dict(), headers=req_headers, stream=True) - headers = { - k:v for k,v in u.headers.items() + resp_headers = { + k:v for k,v in r.headers.items() if k.lower() not in RESPONSE_HEADERS_BLACKLIST } - return Response(iter(lambda: u.read(8192), b''), status=u.status, headers=headers) + response = Response(r.iter_content(chunk_size=8192), status=r.status_code, headers=resp_headers) + response.call_on_close(lambda: r.close()) # XXX: does this work? + return response + if __name__ == '__main__': app().run(debug=True) -- 2.39.3