from flask import Flask, request, redirect import requests import threading import gradio as gr # Flask приложение flask_app = Flask(__name__) @flask_app.route('/', defaults={'path': ''}, methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS']) @flask_app.route('/', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS']) def proxy_request(path): target_url = request.headers.get('URL') if not target_url: return 'Header "URL" is missing', 400 if path: target_url = f"{target_url.rstrip('/')}/{path}" try: headers = {key: value for key, value in request.headers if key.lower() != 'host'} params = request.args data = request.get_data() response = requests.request( method=request.method, url=target_url, headers=headers, params=params, data=data, cookies=request.cookies, allow_redirects=False ) return (response.content, response.status_code, response.headers.items()) except requests.exceptions.RequestException as e: return str(e), 500 # Gradio интерфейс def test_proxy(url, method="GET", payload=""): headers = {"URL": url} try: if method == "GET": response = requests.get("http://localhost:7860", headers=headers) else: response = requests.request(method, "http://localhost:7860", headers=headers, data=payload) return f"Status: {response.status_code}\nResponse: {response.text}" except Exception as e: return f"Error: {str(e)}" gradio_interface = gr.Interface( fn=test_proxy, inputs=[ gr.Textbox(label="Target URL", value="https://httpbin.org/get"), gr.Dropdown(label="Method", choices=["GET", "POST", "PUT", "DELETE"], value="GET"), gr.Textbox(label="Payload (for POST/PUT)", lines=3) ], outputs="text", title="Proxy Server Tester", description="Test the proxy server by sending requests through it" ) def run_flask(): flask_app.run(host='0.0.0.0', port=7860) if __name__ == '__main__': # Запускаем Flask в отдельном потоке flask_thread = threading.Thread(target=run_flask) flask_thread.daemon = True flask_thread.start()