1 背景
上篇文章讲解了requests模块的基础使用,其中有get、put、post等多种请求方式,使用data、json等格式做为请求参数,在请求体中添加请求头部信息的常见信息,如:headers、cookies,以及对请求响应的处理方法。接下来讲解一下requests的高级用法。
2 进阶方法举例
2.1 requests.request()
method:提交方式(get|post);url:提交地址;**kwargs:14个控制访问的参数;
常用的参数有:params、data、json、headers、cookies,已在上篇文章中介绍过了,感兴趣的朋友,可以到上篇文章再回顾一下。以下将讲解与示例其他参数的使用。
示例:
2.1.1 files
请求携带文件,如果有的请求需要上传文件,可以用它来实现。

需注意:favicon.ico文件需和当前脚本在同一目录下,如果不在,可以将文件名称修改为文件路径

http auth认证的两种方式,分别为Basic方式和Digest认证,其中:Basic Auth的优点是提供简单的用户验证功能,其认证过程简单明了,适合于对安全性要求不高的系统或设备中;同样存在缺点:输入的用户名,密码 base64编码后会出现在Authorization里,很容易被解析出来。那么Digest对比Basic认证有什么不同呢?
Digest思想,是使用一种随机数字符串,双方约定好对哪些信息进行哈希运算,即可完成双方身份的验证。Digest模式避免了密码在网络上明文传输,提高了安全性,但它依然存在缺点,例如认证报文被攻击者拦截到攻击者可以获取到资源。
DIGEST 认证提供了高于 BASIC 认证的安全等级,但是和 HTTPS 的客户端认证相比仍旧很弱。
DIGEST 认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。
DIGEST 认证和 BASIC 认证一样,使用上不那么便捷灵活,且仍达不到多数 Web 网站对高度安全等级的追求标准。因此它的适用范围也有所受限。
2.1.2 timeout
请求和响应的超时时间,在网络响应延迟或者无响应时,可以通过设置超时时间,避免等待。

2.1.3 allow_redirects
设置重定向开关。


2.1.4 proxies
同添加headers方法一样,代理参数是dict。

某些接口增加了防骚扰模式,对于大规模且频繁的请求,可能会弹出验证码,或者跳转到登录验证页面,或者封禁IP地址,此时如果想要正常访问,可以通过设置代理来解决这个问题。除了基本的HTTP代理外,requests还支持SOCKS协议的代理。

2.1.5 hooks
即钩子方法,requests库只支持一个response的钩子,即在响应返回时,可以捎带执行自定义方法。可以用于打印一些信息、做一些响应检查、或者向响应中添加额外的信息。

2.1.6 stream
获取内容立即下载开关,response会将报文一次性全部加载到内存中,如果报文过大,可以使用此参数,迭代下载。

2.1.7 verify
认证SSL证书开关,当发送HTTPS请求的时候,如果该网站的证书没有被CA机构信任,程序将报错,可以使用verify参数控制是否检查SSL证书。

2.2 requests库的异常
如何判断是否出现异常呢?
2.2.1 raise_for_status()
该方法在内部判断res.status_code是否等于200,不是则产生异常HTTPError示例:

2.2.2 ReadTimeout
该异常类型,将会捕捉到因请求/响应超时的请求。

2.2.3 RequestException
该异常类型,将会捕捉到因无请求引起的异常请求。

3 总结
看到这里,大家应该明白了,requests库是一个比urilib2模块更加简洁的第三方库,它具有如下的特点:
支持HTTP连接保持和连接池
支持使用cookie、session保持会话
支持文件上传
支持自动响应内容的编码
支持国际化的URL和Post数据自动编码
支持自动实现持久连接keep-alive
因此,requests这个高度封装的模块,可以使我们的HTTP请求,变得更加人性化,使用它将可以轻而易举的完成浏览器请求的任何操作,充分诠释了它的口号:“HTTP for Humans”。