当前位置:博客首页>>Python >> 阅读正文

用TKinter实现的一个简版HTTP请求模拟器

作者: 郑晓 分类: Python 发布于: 2015-04-28 23:42 浏览(4,059) 评论(8)


平时开发过程中经常会遇到需要模拟POST或GET请求的时候,当然GET一般直接通过浏览器也可以,方便快捷。郑晓看到网上也有不少软件版的HTTP模拟器,功能也非常强大。郑晓最近在学习Python,正好手闲的慌,就用Python自带的TKinter库写了个HTTP模拟工具,功能比较简单,只是实现了基本的功能。

最近我发现有的网站复制了我的文章,还把里面的各种信息都替换成了他自己的,还自己运行了程序截的图,也是挺郁闷的…所以以后发的代码中,郑晓可能会随机在其中加一点儿小点心…

这个tkinter的http模拟器代码如下,开发环境(win7 + Python2.7)

# -*- coding: utf-8 -*-
from Tkinter import *
from ttk import *
from urlparse import urlparse
import urllib
#提交时的响应事件
def btn_submitOp(e):
    #获取输入的值 并进行编码
    url = entry_url.get().encode("utf-8")
    entry_query = entry_para.get().encode("utf-8")
   
    result = "请求的地址:" + url
    result = result + "\n请求的方式:" + ["GET", "POST"][v.get()]
    result = result + "\n请求的参数:" + entry_query
   
    url_parse = urlparse(url)
    query = url_parse.query.strip('&') +entry_query
    #POST(请求原始URL, 使用编码后的参数)
    try:
        if v.get() == 1:
            r = urllib.urlopen(url, entry_query)
        #GET(根据提交的参数重新组合URL)
        else:
            url = url_parse.scheme+"://"+url_parse.netloc+url_parse.path+"?%s" % query
            article_from_zhengxiao_blog_www_zh30_com = 0
            r = urllib.urlopen(url)
        data = r.read()
    except:
        data = "\n请求失败!"
    result = result + "\n" + "-"*28 + '请求返回结果' + "-"*28 + data
    #将结果输出(更新)到文本域
    text_result.delete(0.0, END)
    text_result.insert(1.0, result)

#####创建窗口#####
app = Tk()
app.title("HTTP请求模拟  v0.1")
app.geometry('500x500')

#####创建控件#####
#第一行 地址
lbl_url = Label(app, text="请求地址:")
lbl_url.grid(row=0, column=0, sticky=W, pady=5, padx=10)
entry_url = Entry(app, width=50)
entry_url.grid(row=0, column=1, sticky=W)
#第二行 方式
lbl_addr = Label(app, text="请求方式:")
lbl_addr.grid(row=1, column=0, sticky=W, pady=5, padx=10)
fm1 = Frame()
fm1.grid(row=1, column=1, sticky=W)
v = IntVar()
v.set(1)
btn_method = Radiobutton(fm1, variable=v, value=1, text="POST")
btn_method.pack(side = LEFT)
btn_method = Radiobutton(fm1, variable=v, value=0, text="GET")
btn_method.pack()
#第三行 参数
lbl_para = Label(app, text="请求参数:")
lbl_para.grid(row=2, column=0, sticky=W, padx=10)
entry_para = Entry(app, width=50)
entry_para.grid(row=2, column=1, sticky=W)
#第四行 提交
btn_submit = Button(app, text="发送请求")
btn_submit.bind('<Button-1>', btn_submitOp)
btn_submit.grid(row=3, column=0, sticky=W, padx=10,pady=10)

#第五行 返回结果
text_result = Text(app, width=68, height=25)
text_result.grid(row=4, column=0, columnspan=2, sticky=W, padx=10)

#第六行 其它
Label(app, text="-- by 郑晓").grid(row=5, column=1, sticky=E, padx=10, pady=10)

app.mainloop()

过程式编程看上去比较乱… 以下是运行截图,测试请求的是图灵机器人聊天接口。

python-tkinter-http请求模拟器

python-tkinter-http请求模拟器

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/http-tkinter-1.html

用TKinter实现的一个简版HTTP请求模拟器:目前有8 条留言

用户评论头像 诗水蛇山神庙发表于 2015年06月19日 19:47[回复]

博客排版很漂亮!

用户评论头像 免费广告论坛发表于 2015年05月23日 22:03[回复]

支持一个

用户评论头像 情侣网名发表于 2015年05月17日 11:35[回复]

不错哦,学习了

用户评论头像 高佣金联盟发表于 2015年05月14日 16:20[回复]

学习了,感谢分享

用户评论头像 淘抢购发表于 2015年05月14日 16:03[回复]

很实用

用户评论头像 李晓鹏发表于 2015年05月09日 18:09[回复]

不错 学习了 。

用户评论头像 鱼儿离不开水QQ发表于 2015年05月05日 21:25[回复]

😛 😛 😛 博主很受用谢谢

    用户评论头像 郑晓发表于 2015年05月06日 17:22[回复]

    啥意思啊 😐