EmoCube commited on
Commit
98f5791
·
verified ·
1 Parent(s): 0e1ce43

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -0
app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, redirect
2
+ import requests
3
+ import threading
4
+ import gradio as gr
5
+
6
+ # Flask приложение
7
+ flask_app = Flask(__name__)
8
+
9
+ @flask_app.route('/', defaults={'path': ''}, methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])
10
+ @flask_app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])
11
+ def proxy_request(path):
12
+ target_url = request.headers.get('URL')
13
+
14
+ if not target_url:
15
+ return 'Header "URL" is missing', 400
16
+
17
+ if path:
18
+ target_url = f"{target_url.rstrip('/')}/{path}"
19
+
20
+ try:
21
+ headers = {key: value for key, value in request.headers if key.lower() != 'host'}
22
+ params = request.args
23
+ data = request.get_data()
24
+
25
+ response = requests.request(
26
+ method=request.method,
27
+ url=target_url,
28
+ headers=headers,
29
+ params=params,
30
+ data=data,
31
+ cookies=request.cookies,
32
+ allow_redirects=False
33
+ )
34
+
35
+ return (response.content, response.status_code, response.headers.items())
36
+
37
+ except requests.exceptions.RequestException as e:
38
+ return str(e), 500
39
+
40
+ # Gradio интерфейс
41
+ def test_proxy(url, method="GET", payload=""):
42
+ headers = {"URL": url}
43
+ try:
44
+ if method == "GET":
45
+ response = requests.get("http://localhost:5000", headers=headers)
46
+ else:
47
+ response = requests.request(method, "http://localhost:5000", headers=headers, data=payload)
48
+
49
+ return f"Status: {response.status_code}\nResponse: {response.text}"
50
+ except Exception as e:
51
+ return f"Error: {str(e)}"
52
+
53
+ gradio_interface = gr.Interface(
54
+ fn=test_proxy,
55
+ inputs=[
56
+ gr.Textbox(label="Target URL", value="https://httpbin.org/get"),
57
+ gr.Dropdown(label="Method", choices=["GET", "POST", "PUT", "DELETE"], value="GET"),
58
+ gr.Textbox(label="Payload (for POST/PUT)", lines=3)
59
+ ],
60
+ outputs="text",
61
+ title="Proxy Server Tester",
62
+ description="Test the proxy server by sending requests through it"
63
+ )
64
+
65
+ def run_flask():
66
+ flask_app.run(host='0.0.0.0', port=5000)
67
+
68
+ def run_gradio():
69
+ gradio_interface.launch(server_name='0.0.0.0', server_port=7860)
70
+
71
+ if __name__ == '__main__':
72
+ # Запускаем Flask в отдельном потоке
73
+ flask_thread = threading.Thread(target=run_flask)
74
+ flask_thread.daemon = True
75
+ flask_thread.start()
76
+
77
+ # Запускаем Gradio в основном потоке
78
+ run_gradio()