load image fallback
This commit is contained in:
@@ -103,6 +103,51 @@ def videos_proxy():
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@app.route('/api/image', methods=['GET', 'HEAD'])
|
||||
def image_proxy():
|
||||
image_url = request.args.get('url')
|
||||
if not image_url:
|
||||
return jsonify({"error": "No URL provided"}), 400
|
||||
|
||||
parsed = urllib.parse.urlparse(image_url)
|
||||
if parsed.scheme not in ('http', 'https') or not parsed.netloc:
|
||||
return jsonify({"error": "Invalid target URL"}), 400
|
||||
|
||||
try:
|
||||
safe_request_headers = {}
|
||||
for k in ('User-Agent', 'Accept', 'Accept-Encoding', 'Accept-Language'):
|
||||
if k in request.headers:
|
||||
safe_request_headers[k] = request.headers[k]
|
||||
|
||||
resp = session.get(image_url, headers=safe_request_headers, stream=True, timeout=15, allow_redirects=True)
|
||||
|
||||
hop_by_hop = {
|
||||
'connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization',
|
||||
'te', 'trailers', 'transfer-encoding', 'upgrade'
|
||||
}
|
||||
|
||||
forwarded_headers = []
|
||||
for name, value in resp.headers.items():
|
||||
if name.lower() in hop_by_hop:
|
||||
continue
|
||||
forwarded_headers.append((name, value))
|
||||
|
||||
if request.method == 'HEAD':
|
||||
resp.close()
|
||||
return Response("", status=resp.status_code, headers=forwarded_headers)
|
||||
|
||||
def generate():
|
||||
try:
|
||||
for chunk in resp.iter_content(1024 * 16):
|
||||
if chunk:
|
||||
yield chunk
|
||||
finally:
|
||||
resp.close()
|
||||
|
||||
return Response(generate(), status=resp.status_code, headers=forwarded_headers)
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return send_from_directory(app.static_folder, 'index.html')
|
||||
|
||||
Reference in New Issue
Block a user