实例介绍
【实例简介】非常简单的用于测试web_API的HTTP客户端工具
【实例截图】
【核心代码】
【实例截图】

【核心代码】
import tkinter as tk
from tkinter import ttk, messagebox
import requests
import json
class HttpClientApp:
def __init__(self, root):
self.root = root
self.root.title(" HTTP Client 测试工具")
self.root.geometry("800x600")
self.root.resizable(True, True)
self.setup_ui()
def setup_ui(self):
# 主框架
main_frame = ttk.Frame(self.root, padding=10)
main_frame.pack(fill=tk.BOTH, expand=True)
# === 第一行:URL 输入 ===
ttk.Label(main_frame, text="URL:").grid(row=0, column=0, sticky='w', pady=5)
self.url_var = tk.StringVar()
self.url_entry = ttk.Entry(main_frame, textvariable=self.url_var, width=60, font=("Consolas", 10))
self.url_entry.grid(row=0, column=1, columnspan=2, padx=(5, 5), pady=5, sticky='ew')
# === 第二行:请求方式 发送按钮 ===
ttk.Label(main_frame, text="方法:").grid(row=1, column=0, sticky='w', pady=5)
self.method_var = tk.StringVar(value="GET")
method_frame = ttk.Frame(main_frame)
method_frame.grid(row=1, column=1, sticky='w', pady=5)
ttk.Radiobutton(method_frame, text="GET", variable=self.method_var, value="GET").pack(side=tk.LEFT)
ttk.Radiobutton(method_frame, text="POST", variable=self.method_var, value="POST").pack(side=tk.LEFT)
self.send_btn = ttk.Button(main_frame, text=" 发送请求", command=self.send_request)
self.send_btn.grid(row=1, column=2, padx=5)
# === 第三行:请求头(可选) ===
ttk.Label(main_frame, text="请求头 (JSON格式, 可选):").grid(row=2, column=0, columnspan=3, sticky='w', pady=(10, 5))
self.headers_text = tk.Text(main_frame, height=3, font=("Consolas", 9))
self.headers_text.grid(row=3, column=0, columnspan=3, padx=0, pady=5, sticky='ew')
self.headers_text.insert("1.0", '{\n "Content-Type": "application/json"\n}')
# === 第四行:POST 请求体(仅POST时显示) ===
self.body_label = ttk.Label(main_frame, text="POST 请求体 (JSON):")
self.body_label.grid(row=4, column=0, columnspan=3, sticky='w', pady=(10, 5))
self.body_text = tk.Text(main_frame, height=5, font=("Consolas", 9))
self.body_text.grid(row=5, column=0, columnspan=3, padx=0, pady=5, sticky='ew')
self.body_text.insert("1.0", '{}')
# === 第五行:响应显示 ===
ttk.Label(main_frame, text="响应内容:").grid(row=6, column=0, columnspan=3, sticky='w', pady=(10, 5))
# 响应文本框(带滚动条)
response_frame = ttk.Frame(main_frame)
response_frame.grid(row=7, column=0, columnspan=3, sticky='nsew', pady=5)
self.response_text = tk.Text(response_frame, wrap=tk.WORD, font=("Consolas", 9), height=15)
scrollbar = ttk.Scrollbar(response_frame, orient=tk.VERTICAL, command=self.response_text.yview)
self.response_text.configure(yscrollcommand=scrollbar.set)
self.response_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# 配置网格权重
main_frame.columnconfigure(1, weight=1)
main_frame.rowconfigure(7, weight=1)
def send_request(self):
url = self.url_var.get().strip()
method = self.method_var.get()
if not url:
messagebox.showerror("错误", "请输入 URL")
return
# 解析请求头
headers = {}
headers_json = self.headers_text.get("1.0", tk.END).strip()
if headers_json:
try:
headers = json.loads(headers_json)
except json.JSONDecodeError as e:
messagebox.showerror("错误", f"请求头 JSON 格式错误:{e}")
return
# 准备请求参数
kwargs = {"headers": headers}
if method == "POST":
body_json = self.body_text.get("1.0", tk.END).strip()
if body_json:
try:
data = json.loads(body_json)
# 自动设置 Content-Type 如果未指定
if 'content-type' not in (k.lower() for k in headers.keys()):
headers['Content-Type'] = 'application/json'
kwargs["json"] = data
except json.JSONDecodeError as e:
messagebox.showerror("错误", f"请求体 JSON 格式错误:{e}")
return
try:
self.response_text.delete("1.0", tk.END)
self.response_text.insert("1.0", " 正在请求...")
response = requests.request(method, url, **kwargs)
# 清空并显示结果
self.response_text.delete("1.0", tk.END)
result = f"""=== 响应状态 ===
{response.status_code} {response.reason}
{response.url}
=== 响应头 ===
"""
for k, v in response.headers.items():
result = f"{k}: {v}\n"
result = f"\n=== 响应体 ===\n"
try:
# 尝试格式化 JSON
json_data = response.json()
result = json.dumps(json_data, indent=2, ensure_ascii=False)
except:
# 非 JSON 原样输出
result = response.text
self.response_text.insert("1.0", result)
except requests.exceptions.RequestException as e:
self.response_text.delete("1.0", tk.END)
self.response_text.insert("1.0", f" 请求失败:\n{e}")
# ============ 运行程序 ============
if __name__ == '__main__':
root = tk.Tk()
app = HttpClientApp(root)
root.mainloop()
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论