diff options
| author | RblSb <msrblsb@gmail.com> | 2024-04-28 07:23:25 +0300 |
|---|---|---|
| committer | RblSb <msrblsb@gmail.com> | 2024-04-28 21:51:50 +0300 |
| commit | 9d844bbf3ac6be327325b13a91a6b33f73c49c1d (patch) | |
| tree | 52108f2300ca84decf33a1e7b3552e81166ba5ac /src/server/HttpServer.hx | |
| parent | 8679f8edcb6d2f3142db30848c640aed6fe883b8 (diff) | |
Raw youtube fallback for unavailable videos
Also:
- fix `tryLocalIp` replacement (NAT workaround)
- improve proxy headers a bit
- use json2object fork for better generated diffs
Diffstat (limited to 'src/server/HttpServer.hx')
| -rw-r--r-- | src/server/HttpServer.hx | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx index c953bb0..1a0c4d5 100644 --- a/src/server/HttpServer.hx +++ b/src/server/HttpServer.hx @@ -187,9 +187,9 @@ class HttpServer { static function proxyUrl(req:IncomingMessage, res:ServerResponse):Bool { final url = req.url.replace("/proxy?url=", ""); - final proxy = proxyRequest(url, req, res, proxyReq -> { - final url = proxyReq.headers["location"] ?? return false; - final proxy2 = proxyRequest(url, req, res, proxyReq -> false); + final proxy = proxyRequest(url, req, res, proxyRes -> { + final url = proxyRes.headers["location"] ?? return false; + final proxy2 = proxyRequest(url, req, res, proxyRes -> false); if (proxy2 == null) { res.end('Proxy error: multiple redirects for url $url'); return true; @@ -203,8 +203,10 @@ class HttpServer { } static function proxyRequest( - url:String, req:IncomingMessage, res:ServerResponse, - fn:(req:IncomingMessage) -> Bool + url:String, + req:IncomingMessage, + res:ServerResponse, + cancelProxyRequest:(proxyRes:IncomingMessage) -> Bool ):Null<ClientRequest> { final url = try { new URL(safeDecodeURI(url)); @@ -216,12 +218,14 @@ class HttpServer { path: url.pathname + url.search, method: req.method }; + req.headers["referer"] = url.toString(); + req.headers["host"] = url.hostname; final request = url.protocol == "https:" ? Https.request : Http.request; - final proxy = request(options, proxyReq -> { - if (fn(proxyReq)) return; - proxyReq.headers["Content-Type"] = "application/octet-stream"; - res.writeHead(proxyReq.statusCode, proxyReq.headers); - proxyReq.pipe(res); + final proxy = request(options, proxyRes -> { + if (cancelProxyRequest(proxyRes)) return; + proxyRes.headers["Content-Type"] = "application/octet-stream"; + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe(res); }); proxy.on("error", err -> { res.end('Proxy error: ${url.href}'); |
