前言
python,最好的脚本语言,学就完了。
Requests库
之前写盲注脚本的时候就用过Requests库了,许多web题也都需要用上这个库。Requests支持cookie、文件上传、自动确定相应内容编码、自动编码等等,因此十分好用。
发送请求
最简单最常用的方法,http协议中有多种请求方法,我们都可以用requests库中的函数来发送对应请求:
1 | r = requests.get('https://www.baidu.com') #发送GET请求 |
获取请求头/响应头
这里用GET举例,感觉直接用bp更快就是了,不过python可以获取指定单一请求头,有时候还是会用到的,POST请求同理。
获取请求头:
1 | import requests |
获取请求头某一属性:
1 | import requests |
获取响应头:
1 | import requests |
获取响应头某一属性:
1 | import requests |
获取内容
本质上和上面那部分大差不差,直接获取html,Requests会自动解码来自服务器的内容,大多数unicode字符集都能被正确编码:
1 | import requests |
我们也可以通过encoding
属性来查看编码:
1 | import requests |
获取字节对象
无论响应是文本还是二进制内容,我们都可以用content
属性获得bytes对象,Requests 会自动为你解码 gzip 和 deflate 传输编码的响应数据。
1 | import requests |
传递参数
使用dict类型变量传递参数,这也是在写脚本时非常常用的一个方法。如果要传递GET请求的参数,我们使用params
进行传递:
1 | import requests |
当然,我们更常用到的是POST请求发送参数或者对请求头进行注入等等,这时候我们应该使用data
headers
cookie
等等进行参数传递:
1 | import requests |
传递cookie参数也可以通过这种方式。
传递json参数
这点单拎出来讲,因为一般我们post参数,都是直接post,没管post的数据的类型,此时其默认类型为application/x-www-form-urlencoded
。但是如果我们需要传递json格式的数据时就需要进行数据类型指定,当然json是可以直接使用json
参数传递的。
1 | import requests |
Session保持请求
写dvwa盲注时就用到了session,Session()能在多次请求中保持一些参数,最常用的一般是拿来保持cookie。同样会话对象可以通过GET或POST方法发送请求,我们以POST方法为例:
1 | import.requests |
任何你传递给请求方法的字典都会与已设置会话层数据合并。方法层的参数覆盖会话的参数。
不过需要注意,就算使用了会话,方法级别的参数也不会被跨请求保持,如下面这个例子,只有第一个请求发送了cookie:
1 | s = requests.Session() |
base64库
base64加解密
base64.bxxencode接受一个字节数组bytes用于加密,返回一个bytes存储加密之后的内容。
例如:
1 | s = "mrl64" |
base64.bxxdecode接受一个存放着密文的bytes,返回一个bytes存放着解密后的内容。
例如:
1 | s = 'bXJsNjQ=' |
同时支持base64、base32、base16加解密。
url编码
由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种”url safe”的base64编码,其实就是把字符+和/分别变成-和_。
1 | import base64 |
具体可以参考下面这篇博客:
Python标准库base64用法简介
Pillow
这个库相当于是PIL的plus版,支持Python3.x,同时兼容原来PIL的功能。这个库主要用来处理图像。
Pillow库安装成功后,导包时要用PIL来导入,而不能用pillow或Pillow。
1 | import PIL |
由于是misc方面的内容,而且我也就稍微学了下,就不多叙述了。具体的参考下面这篇博客:
Python Pillow(PIL)库的用法介绍
这里留一个二进制转化二维码脚本:
1 | import PIL from Image |
如果给的数据不是二进制字符串而是rgb的值,可以将for循环中的内容稍作改变:
1 | for i in range(0, x): |
总结
python库是python作为脚本语言如此强大的底气所在,这里记录了3个基础的库,在之后我们也会接触学习更多新内容的。