0x00前言
这库让我爱上了python 碉堡!
开心去学了一些python,然后就来学这个时候神库~~
资料来源:http://cn.python-requests.org/en/latest/user/quickstart.html
写上自己学习笔记
加上import requests
就可以开心的用这个库了!
+++++++++++++++++++++++++++++++++++++++++++++++++++
0x01请求篇
一)各种请求类型
1 2 3 4 5 6 |
很漂亮哦~~~
二)传递参数:
用一个dict,字典数据类型就ok了
Get:
1 2 3 4 5 | >>> import requests >>> payload = { 'id' : '1' } >>> r.url |
Post
1 2 3 | >>> import requests >>> payload = { 'id' : '2' } |
三)修改http头
我们常常要修改http包头的数据
还是可以用一个dict来填充着头
1 2 3 4 5 6 | >>> header[ 'User-Agent' : 'baidupaida' ] >>> header[ 'User-Agent' ] = 'baidupaida' >>> header t ': ' baidupaida'} |
四)修改cookie
也是可以在这个http头里的
最好用一个dict来之填充cookies
1 2 3 4 5 | >>> cookies = dict (cookies_are = 'working' ) >>> r = requests.get(url, cookies = cookies) >>> r.text '{ "cookies" : { "cookies_are" : "working" }} |
所以params,data,cookies,header都可以来修改http请求包
+++++++++++++++++++++++++++++++++++++++++++++++++++
0x02响应篇
当我们,改完我的http请求包。这时候,我们就得到一个http响应包对象
1.响应内容
1 2 3 4 | >>> import requests >>> r.text u'[{ "repository" :{ "open_issues" : 0 , "url" :"https: / / github.com / ... |
Request得到他自己推测的文章编码
当然你可以用r.encoding来设置!
1 2 | >>> r.content b'[{ "repository" :{ "open_issues" : 0 , "url" :"https: / / github.com / ... |
Requests会自动为你解码 gzip 和 deflate 传输编码的响应数据。
2.获取http响应的状态码
这在爬虫时候比较重要
r.status_code
当然现在有的网页404也是200 = =
要是302那就的用
r.history 来看看
3.获取http响应头信息
直接放在r.headers 这个dics字典里里面了 很方便 嘿嘿~~ 屌死了
1 2 3 4 5 6 | >>> r.headers { 'content-length' : '201' , 'keep-alive' : 'timeout=5, max=100' , 'server' : 'Apache / 2.2 . 21 (Win32) PHP / 5.3 . 10 ', ' connection ': ' Keep - Alive ', ' date ': ' Tue, 18 Nov 201 4 12 : 20 : 10 GMT ', ' content - type ': ' text / html; charset = iso - 8859 - 1 '} >>> r.headers[ 'server' ] 'Apache/2.2.21 (Win32) PHP/5.3.10' |
#这调用太方便了,php还得匹配.不得不说dics这个数据结构让python如此便捷啊
+++++++++++++++++++++++++++++++++++++++++++++++++++
0x03高级篇 会话
资料来源:http://cn.python-requests.org/en/latest/user/advanced.html#advanced
很多情况下,我们的需要与浏览器多次交换。不仅仅是一两次请求就可以完成的。也就是说我们需要去带上我们的cookie等会话
Requests库为我们创建一个很好用的sessions方法,让我们可以带着我们的会话~~
1 2 3 4 | s = requests.Session() #返回一个requests的session对象 |
#这时候 我们访问就会带上我们在cookie中的phpsessionid啦~ 表示前后是同一个会话
+++++++++++++++++++++++++++++++++++++++++++++++++++
0x04高级篇 实例篇
1.编写一个利用socmd5来单线程批量破解md5的脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #coding=utf-8 import requests import re import sys #定义破解接口 def md5hacher(md5): payload = { 'isajax' : 'CEuqhtkYjBHjhI_0lS8EwMh' , 'md5' :md5} #填充post内容 #处理python错误 try : result = re.findall( '<h1 style="display:inline;">(.*?)</h1>' ,r.text) return result[ 0 ] except : return False if __name__ = = '__main__' : count = len (sys.argv) if count! = 2 : print "usage: cmd5.py pass.txt" else : filename = sys.argv[ 1 ] #打开函数 d = open (filename, 'r' ) #一行一行读文件 data = d.readline().strip( '\r\n' ) #有回车的 while (data): #调用函数破解md5 password = md5hacher(data) if password: print "{0} is crack {1}" . format (data,password) else : print "%s can't crack by socmd5 " % data data = d.readline().strip( '\r\n' ) |
2.ssctf的某题 解法
题目的意思就是,你访问index.php 的时候密码就在headers头里面。然后你要将这个密码进行md5加密,然后再post给index.php。中间等待你的时间很短,反正你手工是不可能了。我之前用php搞定的。现在写了python,代码短了好多
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #coding:utf8 import requests import hashlib import re __author__ = 'wilson' if __name__ = = "__main__" : #创建session对象 s = requests.session() #get请求获取reponse数据包 #请求头的数据表 这真心好~~~ 不要你去匹配了 password = r.headers[ 'password' ] #md5加密 md5 = hashlib.md5() md5.update(password) password = md5.hexdigest() payload = { 'password' :password} #post数据包,注意这里是用一个session哦~~~ #正则匹配key位置 key = re.findall( "key:(.*?)<!" ,r.content) print "key is %s\r\n" % key[ 0 ] |