File size: 2,535 Bytes
98f5791
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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('/<path:path>', 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:5000", headers=headers)
        else:
            response = requests.request(method, "http://localhost:5000", 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=5000)

def run_gradio():
    gradio_interface.launch(server_name='0.0.0.0', server_port=7860)

if __name__ == '__main__':
    # Запускаем Flask в отдельном потоке
    flask_thread = threading.Thread(target=run_flask)
    flask_thread.daemon = True
    flask_thread.start()
    
    # Запускаем Gradio в основном потоке
    run_gradio()