python系列之requests

255 阅读2分钟
import requests

引入requests,发送请求,我们就可以开始使用requests来请求服务器

r=requests.get("https://api.github.com/events")

现在我们就要有响应体变量:r,我们可以通过这个变量来获取响应的内容,对于request是支持多种请求方式的:POST,PUT,DELETE,HEAD,OPTIONS等:

r=requests.put("xxxxxxx/put",dat={xxx:xxx})
r=requests.delete("xxxxxxxx/delete")
r=requests.head("xxxxxxxxxxxx")
r=request.options("xxxxxxxxxxxxxxxx")

对于参数的传递我们只有需要传递:params的关键字,requests会自动完成httpbin.org/get?key=val的参数传递:

r=requests.get("http://localhost:8080/home",params={"key":"val"})
print(r.url) '''你可以打印看到这个转为:http://localhost:8080/home?key=val '''

对于响应体数据:text获取值的时候,一般requests设置默认的:utf-8的编码格式,如果我们想获取响应内容指定为另外一种编码格式:

r.encoding="ISO-8859-1"
print(r.text) '''这个时候,text的编码格式就是:ISO-8859-1'''

requests对于响应体的数据:

r.json() '''这个是支持服务器返回的数据是JSON'''

如果是字节流数据:

from PIL import Image
from io import BytesIO,StringIO
i=Image.open(BytesIO(r.content)) '''完成字节流数据的接收'''

如果我们是请求的TCP、Socket返回的响应的时候,我是需要在请求的加上:stream=True,一般情况先我们是需要将文件流写入到文件中去的,因此我们需要特别注意的要点是:

1.使用响应的:iter_content来处理r.raw的数据

2.指定chunk_size的大小

r=request.get("http://192.168.29.111:8080/evnent",stream=True)
r.raw
with open(filename,'wb') as fd:
    for item in r.iter_content(chunk_size=128):
        fd.write(item)

说了这么多,其实对于我们在B/S的应用中,我们的请求头内容是很多的,在使用requests框架的时候,我们需要特别指定请求头的内容,requests也是支持我们在需要的情况下指定我们的请求头:

header={"Content-Encoding":"gzip","Content-Type":"text/html; charset=UTF-8"}
r=request.get("http://localhost:8080/event",headers=header)

我们也需要注意的是:我们自定义的请求头数据的是低于我们更具体的头信息数据的

我们知道我们使用requests发送请求的可以使用:params来完成参数传递,但是对于提交的数据量很大的时候,我们就需要切换:data参数属性来完成

r=request.post("xxxxxx",json={},data={}) '''这个情况下,json属性传递的数据会被忽略'''
'''因此我们需要切换'''
import json
r=request.post("xxxxxx",data=json.dumps({"xxxx":"xxxx"}))

requests上传文件也是很简单的:

files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r=request.post("xxxx",files=files)

对于上传文件的时候,我们也需要特别注意的就是,我们请求头的:Content-Length,你需要处理一下