特性:可以说Requests最大的特性就是其风格的简单直接优雅。无论是请求方法,还是响应结果的处理,还有cookies,url参数,post提交数据,都体现出了这种风格。
import requests
r = requests.get('https://baidu.com')
字符串格式 二进制数据 json格式的字典数据
print(r.text) print(r.content.decode()) print(r.json()) //获取响应的内容
r.encoding = 'utf-8' r.url响应的url(最终请求的url) r.headers响应头 r.cookies r.status_code 响应状态码
发起请求:
传递url参数:
不需要像urllib那样去拼接url,而是用到params参数,字典类型
resp.url查看此时的url地址
并且,有时候我们会遇到相同的url参数名,但有不同的值,而python的字典又不支持键的重名,那么我们可以把键的值用列表表示:
自定义Headers
如果想自定义请求的Headers,同样的将字典数据传递给headers参数。
自定义cookie
Requests中自定义Cookies也不用再去构造CookieJar对象,直接将字典递给cookies参数。
设置代理
当我们需要使用代理时,同样构造代理字典,传递给proxies参数。
重定向:
在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。
禁止证书验证
有时候我们使用了抓包工具,这个时候由于抓包工具提供的证书并不是由受信任的数字证书颁发机构颁发的,所以证书的验证会失败,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了。
但是关闭验证后,会有一个比较烦人的warning,可以使用以下方法关闭警告:
设置超时:
接受响应:
Requests通过text属性,就可以获得字符串格式的响应内容。
字符编码:Requests会自动的根据响应的报头来猜测网页的编码是什么,然后根据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解码。而如果发现text解码不正确的时候,就需要我们自己手动的去指定解码的编码格式。
二进制数据:而如果你需要获得原始的二进制数据,那么使用content属性即可。
json格式的字典数据: 使用 r.json()
状态码: r.status_code
最终请求的url: r.url
获取响应报头: r.headers
服务器返回的cookies: r.cookies
session会话:
1 在登陆一个页面的时候post方法,用到session,登录后再次发起其他的请求,session会自动把登陆后服务器返回的cookies传递下去,而不需要手动传递cookies值。
2 向同一主机发送多个请求时,session会重用tcp连接。而request发起一次请求就需要建立一次tcp连接,所以这时候session会比request快的多
#session会话 同一主机多次请求,session会重用tcp连接
# start_time = time.time()
# session = requests.session()
# for i in range(100):
# requests.get('https://baidu.com')
# session.get('https://baidu.com')
# print('50次请求共耗时%s秒'%(time.time()-start_time))
3 在Requests中,实现了Session(会话)功能,当我们使用Session时,能够像浏览器一样,在没有关闭关闭浏览器时,能够保持住访问的状态。
这个功能常常被我们用于登陆之后的数据获取,使我们不用再一次又一次的传递cookies。
4 首先我们需要去生成一个Session对象,然后用这个Session对象来发起访问,发起访问的方法与正常的请求是一摸一样的。同时,需要注意的是,如果是我们在get()方法中传入headers和cookies等数据,那么这些数据只在当前这一次请求中有效。如果你想要让一个headers在Session的整个生命周期内都有效的话,需要用以下的方式来进行设置:
下载视频:
# start_time = time.time()
# r = requests.get('https://media-cn2.tvcbook.com/683cba31cf5f81be5aea483d0efaca2a/5d1b038f/v7/video/b83f5f72-75fc-4a8f-9d70-2f28d3126332/6122944d8d4e4b10b6f72f0a67796a52-mp4-hd.mp4')
# #整体读取
# with open('movie2.mp4','wb') as f:
# f.write(r.content)
# print('下载视频请求共耗时%s秒' % (time.time() - start_time))
#流读取
# start_time = time.time()
# r = requests.get('https://media-cn2.tvcbook.com/683cba31cf5f81be5aea483d0efaca2a/5d1b038f/v7/video/b83f5f72-75fc-4a8f-9d70-2f28d3126332/6122944d8d4e4b10b6f72f0a67796a52-mp4-hd.mp4',stream = True)
#
# with open('movie.mp4','wb') as f:
# for chunk in r.iter_content(chunk_size=1024): 一块一块的读取数据
# if chunk:
# f.write(chunk)
#
# print('下载视频请求共耗时%s秒'%(time.time()-start_time))