Python安全(一)
学习Python安全过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— requests库应用详解 ——
一.安装requests库
可以直接使用pip安装,如果电脑上没安装pip,可以到以下网址教程中安装。
Linux:安装教程。
Windows:安装教程。
MAC OS:直接在终端输入代码:sudo easy_install pip
。
安装好pip后,我们就可以安装requests库了。
直接输入代码:pip install requests
。
二.导入requests库
我们首先在Python中导入requests库:
import requests
对于新手来说,我们需要知道requests库有什么功能方法,我们可以dir一下:
print (dir(requests))
在这里我们可以看到requests库的各种方法。
接下来我们就使用几种。
import requests
url="http://www.baidu.com"
r=requests.get(url)
这里使用的是requests库的get方法,相当于我们在浏览器里输入“http://www.baidu.com”这个网址所能获得的的信息。
三.requests库的代理功能
requests库支持代理,支持两种协议,http和https。
proxies = {
"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080" ,
}
我是直接在本地的8080端口进行测试,并且可以利用burpsuite在8080端口进行监听。
若需要输入账户密码,则可以:
proxies = {
"http": "http://user:[email protected]:3128/",
}
当进行代理的时候,需要修改原本的代码:
import requests
url="http://www.baidu.com"
proxies = {
"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080" ,
}
r=requests.get(url,proxies = proxies,verify = false)
这里我们在get方法中添加了参数,proxies参数和verify参数,如果使用的是https认证而本地证书又没有认证,那么需要将verify参数设置为false。当然,如果不进行修改verify,那么代码指令依然可以运行,但是会报错。
四.requests库的方法
import requests
url="http://www.baidu.com"
r=requests.get(url)
print(r)
print(r.status_code)
print(r.text)
print(r.content)
print(r.history)
print(r.request.headers)
print(r.headers)
print(r.request.body)
- status_code:返回http状态码。具体状态码含义点击链接查看。
- text/content:返回请求网站的源代码和结果,比较推荐使用content,因为text在显示中文的时候,容易显示乱码,而content返回的数据格式其实是二进制格式,然后通过decode()转换为utf-8,这样就解决了乱码的问题.。
- history:当请求地网站进行跳转的时候,显示跳转信息,比如跳转次数。若使用content,会显示跳转后的网页的源码或信息。
如果不想使网页进行跳转,那么可以直接加入参数:
r=requests.get(url,allow_redirects=False)
allow_redirects参数是询问是否自动跳转。
4. sys.setdefaultencoding:由于linux和windows的基础设置有一些不同,所以有时候需要更改一些设置,比如编码,是为了防止乱码。这个过程需要引入sys,更改系统设置。完整代码如下:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
- encoding:返回当前编码。
更改编码的代码:
r.encoding = "utf-8"
- request.headers:查看请求包的头。
- headers:查看响应包的头。
修改头的代码:
headers = {'user-agent': 'my-aasdasdaspp/0.0.1', 'asd':'hello world!'}
- request.body:查看请求参数。
- cookies:查看cookies信息。
修改cookies信息的代码:
cookies = dict(cookies_are='working')
- (参数)timeout:设置超时。
具体代码:
r = requests.get(url, timeout=5)
r = requests.get(url, timeout=None)
- (方法)session:使用session。(进行关联请求,自动添加cookies)session的具体原理点击链接查看。
具体代码(注意conn):
conn = requests.session()
r = conn.get(url)
print r.request.headers
r = conn.get(url)
print r.request.headers
- json:将返回值以json的形式展示。json库的具体介绍点击链接查看。
具体代码:
import requests
import json
r = requests.get("http://www.baidu.com/get")
print(type(r.text))
print(r.json())
print(json.loads(r.text))
print(type(r.json()))
- (参数)file:文件操作,文件上传。
具体文件上传的代码:
files = {'file': open('cookie.txt', 'rb')}
response = requests.post("http://httpbin.org/post", files=files)
- 请求方法
- GET: 请求指定的页面信息,并返回实体主体。GET请求将提交的数据放置在HTTP请求协议头中。
进行get请求的代码:
url="http://www.baidu.com"
r=requests.get(url)
- HEAD: 只请求页面的首部。
- POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。POST提交的数据则放在实体数据中。
发送post请求的代码:
payload = {'name': 'loop', 'age': '12'}
r = requests.post("http://httpbin.org/post", data=payload)
- PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE: 请求服务器删除指定的页面。
完整相关代码请点击链接查看。