5.Requests 处理 Cookie
通过r.cookies即可获得RequestsCookieJar对象,其行为与字典类似;如果想带着Cookies 去访问,可以在请求里添加 cookies={‘xxx’:‘yyy’}参数;也可以通过 requests.cookies. RequestsCookieJar()调用 set 方法进行构造,比如:
ar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') # 遍历cookies: for c in r.cookies: print(c.name + ":" + c.value)
CookieJar 与字典间互转的代码示例如下:
# 字典 -> CookieJar cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) # CookieJar-> 字典 cookies = requests.utils.dict_from_cookiejar(r.cookies)
6.Requests 重定向与请求历史
除了 HEAD 请求,Requests 会自动处理所有重定向,可以在执行请求时使用 allow_redirects=False 禁止重定向,也可以使用响应对象的 history 属性来追踪请求历史。该 属性是一个 Response 对象的列表,该对象列表按照请求时间的先后顺序进行排序。
7.Requests 错误与异常处理
使用 Requests 的常见异常如下:
- 遇到网络问题,会抛出 requests.ConnectionError 异常。
- 请求超时,会抛出 requests.Timeout 异常。
- 请求超过了设定的最大重定向次数,会抛出
- requests.TooManyRedirects 异常。
- HTTP 错误,会抛出 requests.HTTPError 异常。
- URL 缺失,会抛出 requests.URLRequired 异常。
- 连接远程服务器超时,会抛出 requests.ConnectTimeout 异常。
另外,Requests 显式抛出的异常都继承自 requests.exceptions.RequestException。
8.Requests Session 会话对象
s = request.Session() # 建立会话 s.post('http://xxx.login',data={'xx':'xx'}) # 登录网址 s.get('http://xxx.user') # 登录后才能访问的网址 s.close() # 关闭会话
9.Requests SSL 证书验证
现在大部分站点都采用 HTTPS,不可避免会涉及证书问题。如果遇到 12306 这种自发 CA 证书的站点,会抛出 requests.exception.SSLError 异常。可以添加参数 verify=False,但 是设置后还是会有下面这样的提示
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage. html#ssl-warnings InsecureRequestWarning)
此时还需要添加 urllib3.disable_warnings(),也可以通过 cert 参数放入证书路径。代码 示例如下:
import requests # 忽略证书 from requests.packages import urllib3 urllib3.disable_warnings() resp = requests.get("https://www.12306.cn",verify=False) print(response.status_code) # 设置本地证书 resp = requests.get('https://www.12306.cn', cert=('**.crt', '**.key'))