本文主要用到requests,需要了解一下CookieJar、Cookie对象
session
首先,需要对python3的session
有一个了解,这个网上有很多介绍,不在过多赘述,session
是一个可以保存请求过程中的Cookie
的类,它可以将服务器的Set-Cookie
直接设置在session
中,在下次使用session进行新的请求时会自动加上服务器返回的Set-Cookie
。
新建一个session的代码也很简单:
session = requests.sessions.session()
这样,一个session
就准备好了,但是此时使用的是requests
库中的默认头部,如果想要设置session
的头部,可以使用下面的方式直接设置。
session.headers = headers
但是这个session
我们有时候需要根据最新的请求修改其Cookie
值,有可能会想到Cookie
不是在头部吗,我直接修改头部不就好了吗?但是直接使用下面的语句是不会成功的:
session.cookies.clear()
session.headers['Cookie'] = newCookie
只能通过session.cookies.setCookie()
或session.cookies.set()
来实现设置Cookie
。
设置Cookie
- 首先从原来的头部获取到
Cookie
字符串 - 对字符串进行处理,处理成一个
dict()
- 处理成一个
dict()
后可以使用上面的两个方法设置Cookie,以下是代码。
# 处理字符串
def getCookie(cookieStr):
cookieDic = dict()
b = cookieStr.split(';')
for item in b:
i = item.split('=')
cookieDic[i[0]] = i[1]
return cookieDic
# 设置Cookie 方法1,通过字典去设置
def setSessionCookie1(session, cookieStr):
myDic = getCookie(cookieStr)
session.cookies.clear()
# 直接通过字典去设置
for k,v in myDic.items():
session.cookies.set(k,v)
# 设置Cookie 方法2,通过Cookie对象设置Cookie
def setSessionCookie2(session, cookieStr):
myDic = getCookie(cookieStr)
myCookie = requests.utils.cookiejar_from_dict(myDic)
session.cookies.clear()
for i in myCookie:
session.cookies.set_cookie(i)
方法2就相当于是新建了很多个Cookie对象,Cookie还有很多其他的属性,比如version
,domain
,expires
等等,python
现在遵循的标准为RFC2109
。