|
from flask import Flask, request, redirect |
|
import requests |
|
import threading |
|
import gradio as gr |
|
|
|
|
|
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 |
|
|
|
|
|
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_thread = threading.Thread(target=run_flask) |
|
flask_thread.daemon = True |
|
flask_thread.start() |
|
|
|
|
|
run_gradio() |