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() |