zoukankan      html  css  js  c++  java
  • wxpython笔记:wxpython实现HTTP请求交互式工具

    简介:wxpython写的HTTP请求交互式工具,现在只支持Get、Post两种方式。

    主程序:

    import wx
    import numpy
    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
    from matplotlib.figure import Figure
    import http_resquest
    import json
    import login
    class Example(wx.Frame):
        def __init__(self, parent, title):
            super(Example, self).__init__(parent, title=title)
            self.Init_Panel()
            self.Init_Box()
            self.Init_Left()
            self.Init_Center()
            # 将三个垂直盒子添加到垂直盒子
            self.Boxh1.Add(self.LeftPanel,proportion = 1, border = 2,flag = wx.ALL | wx.EXPAND)
            self.Boxh1.Add(self.CenterPanel, proportion=4, border=2, flag=wx.ALL | wx.EXPAND)
    
            #将垂直盒子和主框架关联
            self.SetSizer(self.Boxh1)
            #显示主框架
            self.Show()
            self.Http = http_resquest.Http_R()
        #创建三个面板
        def Init_Panel(self):
            self.LeftPanel = wx.Panel(self)
            self.CenterPanel = wx.Panel(self)
    
        #创建四个盒子
        #两个垂直盒子、两个水平盒子
        def Init_Box(self):
            #两个垂直盒子
            self.Boxv1 = wx.BoxSizer(wx.VERTICAL)
            self.Boxv2 = wx.BoxSizer(wx.VERTICAL)
    
            #两个水平盒子
            self.Boxh1 = wx.BoxSizer(wx.HORIZONTAL)
            self.Boxh2 = wx.BoxSizer(wx.HORIZONTAL)
            self.Boxh3 = wx.BoxSizer(wx.HORIZONTAL)
        def Init_Left(self):
    
            # 创建一个wx.StaticBox对象。
            # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数。
            nm = wx.StaticBox(self.LeftPanel, -1, 'URL')
            nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL)
            self.input = wx.TextCtrl(self.LeftPanel, -1, size=(200, 20), style=wx.ALIGN_LEFT)
            nmSizer.Add(self.input, 1, wx.EXPAND | wx.ALL, 10)
            self.Boxh3.Add(nmSizer, 5, wx.EXPAND | wx.ALL, 10)
    
    
            self.button = wx.Button(self.LeftPanel, -1, "请求")
            self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
            # self.button.SetDefault()  # 将按钮设置为默认按钮,不然会是选中状态,边框不同
            self.Boxh3.Add( self.button, 0,wx.EXPAND | wx.ALL, 10)
            self.Boxv1.Add(self.Boxh3, 0,wx.EXPAND | wx.ALL, 10)
    
            # 创建一个wx.StaticBox对象。
            # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数。
            nm1 = wx.StaticBox(self.LeftPanel, -1, '请求方法')
            nmSizer1 = wx.StaticBoxSizer(nm1, wx.VERTICAL)
            # 创建下拉框
            self.languages = ['GET', 'POST', 'HEAD','PUT','ELETE']
            self.combo1 = wx.ComboBox(self.LeftPanel, choices=self.languages, value=self.languages[0])
            # 在StaticBoxSizer盒子添加下拉框
            nmSizer1.Add(self.combo1, 1, wx.EXPAND  | wx.ALL, 1)
            self.Boxv1.Add(nmSizer1,0, wx.EXPAND | wx.ALL,10)
    
    
    
            # 创建一个wx.StaticBox对象
            # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数
            nm2 = wx.StaticBox(self.LeftPanel, -1, '请求参数')
            nmSizer2 = wx.StaticBoxSizer(nm2, wx.VERTICAL)
            # 创建文本域
            self.multiText1 = wx.TextCtrl(self.LeftPanel, -1, style=wx.TE_MULTILINE)  # 创建一个文本控件
            self.multiText1.SetInsertionPoint(0)  # 设置插入点
            nmSizer2.Add(self.multiText1, 1, wx.EXPAND | wx.ALL, 10)
            #  在垂直盒子里添加StaticBoxSizer盒子
            self.Boxv1.Add(nmSizer2, 1, wx.EXPAND | wx.ALL, 10)
    
            # 创建一个wx.StaticBox对象
            # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数
            nm3 = wx.StaticBox(self.LeftPanel, -1, '请求头')
            nmSizer3 = wx.StaticBoxSizer(nm3, wx.VERTICAL)
            # 创建文本域
            self.multiText2 = wx.TextCtrl(self.LeftPanel, -1, style=wx.TE_MULTILINE)  # 创建一个文本控件
            self.multiText2.SetInsertionPoint(0)  # 设置插入点
            nmSizer3.Add(self.multiText2, 1, wx.EXPAND | wx.ALL, 10)
    
            #  在垂直盒子里添加StaticBoxSizer盒子
            self.Boxv1.Add(nmSizer3, 1, wx.EXPAND | wx.ALL, 10)
    
            #把垂直盒子与LeftPanel关联起来
            self.LeftPanel.SetSizer(self.Boxv1)
    
        def OnClick(self,event):
            url = self.input.GetValue()
            if url != "":
                self.multiText3.Clear()
                self.multiText4.Clear()
                data = self.multiText1.GetValue()
                headers = self.multiText2.GetValue()
                if self.combo1.GetValue() == "GET":
                    self.get_data(headers, data, url, self.Http.Get)
                elif self.combo1.GetValue() == "POST":
                    self.get_data(headers, data, url, self.Http.Post)
                else:
                    print("功能占位")
        def get_data(self,headers,data,url,Callback):
            if data == "" and headers == "":
                headers_data, json_data = Callback(url)
            elif data != "" and headers == "":
                data = data.split("
    ")
                data_list = [i.split(":") for i in data]
                headers_data, json_data = Callback(url, data=dict(data_list))
            elif data == "" and headers != "":
                headers = headers.split("
    ")
                headers_list = [i.split(":") for i in headers]
                headers_data, json_data = Callback(url, header=dict(headers_list))
            else:
                data = data.split("
    ")
                data_list = [i.split(":") for i in data]
                headers = headers.split("
    ")
                headers_list = [i.split(":") for i in headers]
                headers_data, json_data = Callback(url, dict(data_list), dict(headers_list))
            for key, value in headers_data.items():
                self.multiText3.write(str(key) + ":" + str(value) + "
    ")
            for key, value in json_data.items():
                self.multiText4.write(str(key) + ":" + str(value) + "
    ")
    
        def Init_Center(self):
            # 创建一个wx.StaticBox对象
            # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数
            nm1 = wx.StaticBox(self.CenterPanel, -1, '返回头')
            nmSizer1 = wx.StaticBoxSizer(nm1, wx.VERTICAL)
            # 创建文本域
            self.multiText3 = wx.TextCtrl(self.CenterPanel, -1, style=wx.TE_MULTILINE)  # 创建一个文本控件
            self.multiText3.SetInsertionPoint(0)  # 设置插入点
            nmSizer1.Add(self.multiText3, 1, wx.EXPAND | wx.ALL, 10)
            #  在水平盒子里添加StaticBoxSizer盒子
            self.Boxh2.Add(nmSizer1, 1, wx.EXPAND | wx.ALL, 10)
    
            # 创建一个wx.StaticBox对象
            # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数
            nm2 = wx.StaticBox(self.CenterPanel, -1, '返回内容')
            nmSizer2 = wx.StaticBoxSizer(nm2, wx.VERTICAL)
            # 创建文本域
            self.multiText4 = wx.TextCtrl(self.CenterPanel, -1, style=wx.TE_MULTILINE)  # 创建一个文本控件
            self.multiText4.SetInsertionPoint(0)  # 设置插入点
            nmSizer2.Add(self.multiText4, 1, wx.EXPAND | wx.ALL, 10)
    
            #  在水平盒子里添加StaticBoxSizer盒子
            self.Boxh2.Add(nmSizer2, 1, wx.EXPAND | wx.ALL, 10)
    
            #  在垂直盒子里添加水平盒子
            self.Boxv2.Add(self.Boxh2, 1, wx.EXPAND | wx.ALL, 10)
    
    
            #创建notebook
            nb = wx.Notebook(self.CenterPanel, style=wx.NB_FIXEDWIDTH)
            page1 = PageOne(nb)
            page2 = PageTwo(nb)
            page3 = PageThree(nb)
            #在notebook中添加面板,第一个参数是面板,第二个参数是标签
            nb.AddPage(page1, "页面内容")
            nb.AddPage(page2, "内容查找")
            nb.AddPage(page3, "日志")
            self.Boxv2.Add(nb, 1, wx.EXPAND | wx.ALL, 10)
            self.CenterPanel.SetSizer(self.Boxv2)
    
    #本质:创建了三个面板
    ###########################使用说明1######################################
    class PageOne(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            colour = [(160, 255, 204), (153, 204, 255), (151, 253, 225), ]
            self.SetBackgroundColour(colour[0])
            self.tx1 = wx.StaticText(self, -1, "页面内容", (355, 45),
                                        (100, -1), wx.ALIGN_CENTER)
            font = wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)
            self.tx1.SetFont(font)
    
    
    ###########################使用说明2######################################
    class PageTwo(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            colour = [(160, 255, 204), (153, 204, 255), (151, 253, 225), ]
            self.SetBackgroundColour(colour[1])
            self.tx2 = wx.StaticText(self, -1, "选择检索", (355, 45),
                                        (100, -1), wx.ALIGN_CENTER)
            font = wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)
            self.tx2.SetFont(font)
    
    
    ###########################使用说明3######################################
    class PageThree(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            colour = [(160, 255, 204), (153, 204, 255), (151, 253, 225), ]
            self.SetBackgroundColour(colour[2])
            self.tx3 = wx.StaticText(self, -1, "日志", (355, 45),
                                        (100, -1), wx.ALIGN_CENTER)
            font = wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)
            self.tx3.SetFont(font)
    
    app = wx.App()
    Example(None, title='HTTP Tool')
    app.MainLoop()
    http_resquest.py:
    import requests
    
    class Http_R():
        def __init__(self):
           pass
        def Get(self,url,data = None,header = None):
            try:
               res = requests.get(url, params=data,headers = header,timeout=10)
               return res.headers, res.json()
            except:
                print("请求错误")
    
        def Post(self,url,data = None,header = None):
            try:
                res = requests.post(url, params=data,headers = header,timeout=10)
                return res.headers, res.json()
            except:
                print("请求错误")

    演示:

  • 相关阅读:
    java web 自定义的权限框架
    java web 中 读取windows图标并显示
    apache httpclient
    Gson json解析工具
    org.apache.commons
    ehcache 缓存管理工具
    springmvc集成Freemarke配置的几点
    SaltStack与ZeroMQ(二)
    Python中的__init__和__new__介绍
    TCP 介绍
  • 原文地址:https://www.cnblogs.com/-wenli/p/12291307.html
Copyright © 2011-2022 走看看