1 #!/usr/bin/python
2 #-*-coding:utf-8-*-
3 from PyQt4.QtGui import *
4 from PyQt4.QtCore import *
5 importrequests, sys6
7 reload(sys)8 sys.setdefaultencoding("utf-8")9
10 #主入口文件
11 classMainWidget(QDialog):12 def __init__(self, parent=None):13 super(MainWidget, self).__init__(parent)14 self.setMinimumSize(100, 100)15 self.setWindowFlags(Qt.CustomizeWindowHint |Qt.WindowCloseButtonHint)16 self.setWindowOpacity(0.7)17
18 #URL
19 self.urllabel = QLabel(u'提交URL:')20 self.url = QLineEdit(u'')21 self.methodtype =QComboBox()22 self.methodtype.addItem('POST')23 self.methodtype.addItem('GET')24 self.UrlLoayout =QHBoxLayout()25 self.UrlLoayout.addWidget(self.urllabel)26 self.UrlLoayout.addWidget(self.url)27 self.UrlLoayout.addSpacing(20) #添加一个20px的空间距离 且不带弹性
28 self.UrlLoayout.addWidget(self.methodtype)29
30 #添加头部group
31 self.headDict ={}32 self.headPostArrayKey =033 self.HeadGroupBox = QGroupBox(u'头部数据')34 self.HeadGroupBox.setMinimumHeight(200) #高度最小值
35
36 self.HeadAddParam = QPushButton(u'+')37 self.headDict[str(self.headPostArrayKey) + '_key'] =QLineEdit()38 self.headDict[str(self.headPostArrayKey) + '_value'] =QLineEdit()39 self.HeadGroupBoxLayout =QGridLayout()40 self.HeadGroupBoxLayout.addWidget(self.HeadAddParam, 0, 0)41 self.HeadGroupBoxLayout.addWidget(QLabel(u'Key:'), 1, 0)42 self.HeadGroupBoxLayout.addWidget(self.headDict[str(self.headPostArrayKey) + '_key'], 1, 1)43 self.HeadGroupBoxLayout.addWidget(QLabel(u'Value:'), 1, 2)44 self.HeadGroupBoxLayout.addWidget(self.headDict[str(self.headPostArrayKey) + '_value'], 1, 3)45 self.HeadGroupBox.setLayout(self.HeadGroupBoxLayout)46 self.HeadAddParam.clicked.connect(self.addHeadParam)47
48 #添加Body group
49 self.bodyDict ={}50 self.bodyPostArrayKey =051 self.BodyGroupBox = QGroupBox(u'正文数据')52 self.BodyGroupBox.setMinimumHeight(200)53 self.BodyAddParam = QPushButton(u'+')54 self.bodyDict[str(self.bodyPostArrayKey) + '_key'] = QLineEdit(u'')55 self.bodyDict[str(self.bodyPostArrayKey) + '_value'] = QLineEdit(u'')56 self.BodyGroupBoxLayout =QGridLayout()57 self.BodyGroupBoxLayout.addWidget(self.BodyAddParam, 0, 0)58 self.BodyGroupBoxLayout.addWidget(QLabel(u'Key:'), 1, 0)59 self.BodyGroupBoxLayout.addWidget(self.bodyDict[str(self.bodyPostArrayKey) + '_key'], 1, 1)60 self.BodyGroupBoxLayout.addWidget(QLabel(u'Value:'), 1, 2)61 self.BodyGroupBoxLayout.addWidget(self.bodyDict[str(self.bodyPostArrayKey) + '_value'], 1, 3)62 self.BodyGroupBox.setLayout(self.BodyGroupBoxLayout)63 self.BodyAddParam.clicked.connect(self.addBodyParam)64
65 #提交按钮
66 self.btnPost = QPushButton(u'提交')67 self.postbtnLoayout =QHBoxLayout()68 self.postbtnLoayout.addStretch()69 self.postbtnLoayout.addWidget(self.btnPost)70
71
72 #Main布局
73 main_layout =QVBoxLayout()74 main_layout.addLayout(self.UrlLoayout)75 main_layout.addWidget(self.HeadGroupBox)76 main_layout.addWidget(self.BodyGroupBox) #addWidget 添加的是Qobject
77 main_layout.addLayout(self.postbtnLoayout) #addLayout 添加的是 Layout
78
79 main_layout.setSpacing(0)80 self.setLayout(main_layout)81 self.connect(self.btnPost, SIGNAL('clicked()'), self.postData)82
83 #发送数据
84 defpostData(self):85 self.headdictdata ={}86 self.bodydictdata ={}87 LOOPpar1 = {'1': self.headDict.items(), 2: self.bodyDict.items()}88 LOOPpar2 = {'1': self.headdictdata, 2: self.bodydictdata}89 for Looptype inLOOPpar1:90 for k, v inLOOPpar1[Looptype]:91 temp = k.split('_')92 if temp[1] == 'key':93 ifLOOPpar2[Looptype].has_key(temp[0]):94 LOOPpar2[Looptype][temp[0]]['key'] =str(v.text())95 else:96 LOOPpar2[Looptype][temp[0]] = {'key': str(v.text())}97
98 elif temp[1] == 'value':99 ifLOOPpar2[Looptype].has_key(temp[0]):100 LOOPpar2[Looptype][temp[0]]['value'] =str(v.text())101 else:102 LOOPpar2[Looptype][temp[0]] = {'value': str(v.text())}103
104 url =self.url.text()105 method =self.methodtype.currentText()106 if noturl:107 QMessageBox.warning(self, u'notice', 'URL must fill in', QMessageBox.Yes)108 self.url.cursor()109 returnFalse110 self.Theading = TheadingPost({'url': str(url), 'method': str(method), 'headdictdata': self.headdictdata,111 'bodydictdata': self.bodydictdata})112 self.connect(self.Theading, SIGNAL("updateresult"), self.updateResult) #创建一个信号,在线程状态结果时发射触发
113 self.Theading.start() #线程开始
114
115 defupdateResult(self, resdata):116 if resdata['status'] == 1:117 QMessageBox.about(self, u"返回数据", str(resdata['msg']))118 else:119 QMessageBox.warning(self, u'错误提示!', str(resdata['msg']), QMessageBox.Yes)120
121
122 #添加头部Data
123 defaddHeadParam(self):124 sts = str(self.headPostArrayKey + 1)125 self.headDict[sts + '_key'] =QLineEdit()126 self.headDict[sts + '_value'] =QLineEdit()127 self.HeadGroupBoxLayout.addWidget(QLabel(u'Key:'))128 self.HeadGroupBoxLayout.addWidget(self.headDict[sts + '_key'])129 self.HeadGroupBoxLayout.addWidget(QLabel(u'Value:'))130 self.HeadGroupBoxLayout.addWidget(self.headDict[sts + '_value'])131 self.headPostArrayKey += 1
132
133 #添加Body Data
134 defaddBodyParam(self):135 sts = str(self.bodyPostArrayKey + 1)136 self.bodyDict[sts + '_key'] =QLineEdit()137 self.bodyDict[sts + '_value'] =QLineEdit()138
139 self.BodyGroupBoxLayout.addWidget(QLabel(u'Key:'))140 self.BodyGroupBoxLayout.addWidget(self.bodyDict[sts + '_key'])141 self.BodyGroupBoxLayout.addWidget(QLabel(u'Value:'))142 self.BodyGroupBoxLayout.addWidget(self.bodyDict[sts + '_value'])143 self.bodyPostArrayKey += 1
144
145
146 #线程提交类
147 classTheadingPost(QThread):148 def __init__(self, dict):149 super(TheadingPost, self).__init__()150 self.dict =dict151
152 defrun(self):153 self.action = self.dict['url']154 self.headerdict = self.dict['headdictdata'].values()155 self.datadict = self.dict['bodydictdata'].values()156 self.header ={}157 for hv inself.headerdict:158 self.header[hv['key']] = hv['value']159 self.data ={}160 for dv inself.datadict:161 self.data[dv['key']] = dv['value']162 self.method = self.dict['method']163 result ={}164 result['status'] =0165 try:166 returndata =self.httpRequest(self.method, self.action, self.data)167 result['status'] = 1
168 result['msg'] =returndata169 exceptException, e:170 result['status'] = 2
171 result['msg'] =e172
173 self.emit(SIGNAL("updateresult"), result)174
175
176 def httpRequest(self, method, action, query=None):177 default_timeout = 10
178 if (method == 'GET'):179 print('sd')180 #url = action if (query == None) else (action + '?' + query)
181 connection = requests.get(action, headers=self.header, timeout=default_timeout, params=query)182 elif (method == 'POST'):183 connection =requests.post(184 action,185 data=query,186 headers=self.header,187 timeout=default_timeout188 )189 connection.encoding = "UTF-8"
190 returnconnection.text191
192
193 if __name__ == "__main__":194 app =QApplication(sys.argv)195 main_widget =MainWidget()196 main_widget.show()197 sys.exit(app.exec_())