File size: 2,532 Bytes
2d93720 4de386a 2d93720 326f1b4 2d93720 326f1b4 2d93720 14f06cc 2d93720 14f06cc 326f1b4 14f06cc 2d93720 4de386a 2d93720 326f1b4 14f06cc 326f1b4 14f06cc 2d93720 14f06cc 4de386a 326f1b4 4de386a 326f1b4 14f06cc 2d93720 326f1b4 2d93720 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
import requests
import random
import time
import threading
from flask import Flask, request, Response, jsonify
PROXY_LIST_URL = "https://proxies.typegpt.net/ips.txt"
proxies_cache = []
last_refresh = 0
app = Flask(__name__)
def fetch_proxies():
try:
resp = requests.get(PROXY_LIST_URL, timeout=10)
resp.raise_for_status()
proxies = [line.strip() for line in resp.text.splitlines() if line.strip()]
return proxies
except Exception as e:
print(f"[ERROR] Failed to fetch proxies: {e}")
return []
def get_random_proxy(proxies):
if not proxies:
return None
return random.choice(proxies)
def refresh_proxies_loop():
global proxies_cache, last_refresh
while True:
if time.time() - last_refresh > 300 or not proxies_cache:
proxies_cache = fetch_proxies()
last_refresh = time.time()
print(f"[INFO] Refreshed {len(proxies_cache)} proxies.")
time.sleep(60)
@app.route("/health", methods=["GET"])
def health():
return "Healthy", 200
@app.route("/<path:target_url>", methods=["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"])
def proxy_request(target_url):
if not target_url.startswith("http"):
target_url = "http://" + target_url
proxy = get_random_proxy(proxies_cache)
if not proxy:
return jsonify({"error": "No proxies available"}), 500
proxies = {"http": proxy, "https": proxy}
try:
print(f"[INFO] Forwarding {request.method} to {target_url} via {proxy}")
# Forward original request (method, headers, body, params)
resp = requests.request(
method=request.method,
url=target_url,
headers={k: v for k, v in request.headers if k.lower() != "host"},
data=request.get_data(),
cookies=request.cookies,
params=request.args,
proxies=proxies,
timeout=30,
allow_redirects=False
)
# Copy headers + add X-Proxy-Used
headers = dict(resp.headers)
headers["X-Proxy-Used"] = proxy
return Response(
resp.content,
status=resp.status_code,
headers=headers,
)
except Exception as e:
return jsonify({"error": "Proxy failed", "proxy": proxy, "details": str(e)}), 502
def main():
t = threading.Thread(target=refresh_proxies_loop, daemon=True)
t.start()
app.run(host="0.0.0.0", port=5000)
if __name__ == "__main__":
main()
|