|
|
from collections.abc import Sequence |
|
|
from typing import Literal, Optional, Dict, Any |
|
|
import json |
|
|
|
|
|
import gradio as gr |
|
|
import requests |
|
|
|
|
|
from tdagent.constants import HttpContentType |
|
|
|
|
|
|
|
|
HttpMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"] |
|
|
|
|
|
def make_http_request( |
|
|
url: str, |
|
|
method: HttpMethod = "GET", |
|
|
content_type: str = "", |
|
|
body: str = "", |
|
|
timeout: float = 30, |
|
|
custom_headers: str = "" |
|
|
) -> tuple[str, str]: |
|
|
"""Make an HTTP request to a URL with specified method and parameters. |
|
|
|
|
|
Args: |
|
|
url: The URL to make the request to. |
|
|
method: HTTP method to use (GET, POST, PUT, DELETE, PATCH, HEAD). |
|
|
content_type: Comma-separated string of content types. |
|
|
body: Request body for methods that support it (POST, PUT, PATCH). |
|
|
timeout: Request timeout in seconds. Defaults to 30. |
|
|
custom_headers: JSON string of additional headers. |
|
|
|
|
|
Returns: |
|
|
A pair of strings (content, error_message). |
|
|
""" |
|
|
|
|
|
headers = {} |
|
|
|
|
|
|
|
|
if content_type: |
|
|
headers["Accept"] = content_type |
|
|
|
|
|
|
|
|
if custom_headers: |
|
|
try: |
|
|
custom_headers_dict = json.loads(custom_headers) |
|
|
headers.update(custom_headers_dict) |
|
|
except json.JSONDecodeError: |
|
|
return "", "Invalid JSON format in custom headers" |
|
|
|
|
|
|
|
|
request_params: Dict[str, Any] = { |
|
|
"url": url, |
|
|
"headers": headers, |
|
|
"timeout": timeout, |
|
|
} |
|
|
|
|
|
|
|
|
if method in ["POST", "PUT", "PATCH"] and body: |
|
|
request_params["data"] = body |
|
|
|
|
|
try: |
|
|
response = requests.request(method, **request_params) |
|
|
except requests.exceptions.MissingSchema as err: |
|
|
return "", str(err) |
|
|
except requests.exceptions.RequestException as err: |
|
|
return "", str(err) |
|
|
|
|
|
try: |
|
|
response.raise_for_status() |
|
|
except requests.HTTPError as err: |
|
|
return "", str(err) |
|
|
|
|
|
|
|
|
if method == "HEAD": |
|
|
return str(dict(response.headers)), "" |
|
|
|
|
|
return response.text, "" |
|
|
|
|
|
|
|
|
gr_make_http_request = gr.Interface( |
|
|
fn=make_http_request, |
|
|
inputs=[ |
|
|
gr.Textbox(label="URL"), |
|
|
gr.Dropdown( |
|
|
choices=["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"], |
|
|
label="HTTP Method", |
|
|
value="GET" |
|
|
), |
|
|
gr.Textbox( |
|
|
label="Content Type", |
|
|
placeholder="text/html,application/json" |
|
|
), |
|
|
gr.Textbox( |
|
|
label="Request Body (for POST/PUT/PATCH)", |
|
|
lines=3, |
|
|
placeholder='{"key": "value"}' |
|
|
), |
|
|
gr.Number( |
|
|
label="Timeout (seconds)", |
|
|
value=30, |
|
|
minimum=1, |
|
|
maximum=300 |
|
|
), |
|
|
gr.Textbox( |
|
|
label="Custom Headers (JSON format)", |
|
|
placeholder='{"Authorization": "Bearer token"}' |
|
|
) |
|
|
], |
|
|
outputs=gr.Text(label="Response"), |
|
|
title="Make HTTP Requests", |
|
|
description=( |
|
|
"Make HTTP requests with different methods and parameters. " |
|
|
"Supports GET, POST, PUT, DELETE, PATCH, and HEAD methods. " |
|
|
"For POST, PUT, and PATCH requests, you can include a request body. " |
|
|
"Custom headers can be added in JSON format. " |
|
|
"Be cautious when accessing unknown URLs." |
|
|
), |
|
|
examples=[ |
|
|
["https://google.com", "GET", "text/html", "", 30, ""], |
|
|
["https://api.example.com/data", "POST", "application/json", '{"key": "value"}', 30, '{"Authorization": "Bearer token"}'], |
|
|
], |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
gr_make_http_request.launch() |