10.每天进步一点点---Python-Requests HTTP 请求库-2

文章目录

  • 5.Requests 处理 Cookie
  • 6.Requests 重定向与请求历史
  • 7.Requests 错误与异常处理
  • 8.Requests Session 会话对象
  • 9.Requests SSL 证书验证

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'))

你可能感兴趣的:(#,Python爬虫学习笔记,Requests-cookie,RequestsSession,Request,SSL)