网站seo专员,网站怎么做百度权重,购物系统名称,有什么公司要做推广的本篇主要讲解Python Requests模块session的使用建议及整个会话中的所有cookie的方法。
测试代码
服务端#xff1a;下面是用flask做的一个服务端#xff0c;用来设置cookie以及打印请求时的请求头。
# -*- coding: utf-8 -*-
from flask import Flask, make_response, req…本篇主要讲解Python Requests模块session的使用建议及整个会话中的所有cookie的方法。
测试代码
服务端下面是用flask做的一个服务端用来设置cookie以及打印请求时的请求头。
# -*- coding: utf-8 -*-
from flask import Flask, make_response, requestapp Flask(__name__)app.route(/a1)
def a1():print(request.headers)rp make_response()rp.set_cookie(a1, 123)return rpapp.route(/a2)
def a2():print(request.headers)rp make_response()# rp.set_cookie(a2, 234)return rpapp.route(/a3)
def a3():print(request.headers)rp make_response()rp.set_cookie(a3, 345)return rpif __name__ __main__:app.run(host0.0.0.0)
左右滑动查看完整代码
客户端
# -*- coding: utf-8 -*-import requestsurl1 http://192.168.2.159:5000/a1
url2 http://192.168.2.159:5000/a2
url3 http://192.168.2.159:5000/a3cookies requests.utils.cookiejar_from_dict({test: test})
print(type(cookies), cookies) # RequestsCookieJar 对象
s requests.session()
s.cookies cookies # 这里设置的cookie testtest 是所有请求中都会附带的
s.headers {h1:h1} # 这里设置的请求头h1h1是所有请求中都会附带的
r1 s.get(url1, cookies{r1: r1},headers{h2:h2}) # 临时加上cookie r1r1 和 header h2h2 下一个请求中不会有此 cookie 和header
r2 s.get(url2)
requests.utils.add_dict_to_cookiejar(s.cookies, {xx: xx}) # 在接下来的请求中永久添加xx cookier3 s.get(url3)# r1.cookies 是一个RequestsCookieJar对象可以使用 requests.utils.dict_from_cookiejar(r1.cookies) 将其转换成dict
# 我发现可以直接用dict进行转换这样写起来更方便
print(dict(r1.cookies)) # 打印r1请求的返回结果中设置的cookies
print(dict(r2.cookies)) # 打印r2请求的返回结果中设置的cookies
print(dict(r3.cookies)) # 打印r3请求的返回结果中设置的cookiesprint(dict(s.cookies)) # s.cookies中包含整个会话请求中的所有cookie临时添加的如上面的r1不包含在内
左右滑动查看完整代码
先启动服务端再启动客户端。
运行结果
服务端打印结果
192.168.2.159 - - [26/Jun/2019 17:28:00] GET /a1 HTTP/1.1 200 -
Host: 192.168.2.159:5000
Accept-Encoding: identity
H1: h1
H2: h2
Cookie: testtest; r1r1192.168.2.159 - - [26/Jun/2019 17:28:00] GET /a2 HTTP/1.1 200 -
Host: 192.168.2.159:5000
Accept-Encoding: identity
H1: h1
Cookie: testtest; a1123192.168.2.159 - - [26/Jun/2019 17:28:00] GET /a3 HTTP/1.1 200 -
Host: 192.168.2.159:5000
Accept-Encoding: identity
H1: h1
Cookie: testtest; xxxx; a1123
左右滑动查看完整代码
客户端打印结果
class requests.cookies.RequestsCookieJar RequestsCookieJar[Cookie testtest for /]
{a1: 123}
{}
{a3: 345}
{test: test, xx: xx, a1: 123, a3: 345}
左右滑动查看完整代码
总结及使用建议
通过服务端打印可以看出如果我们不设置User-Agent requests模块的请求头是python-requests/2.21.0这不是正常浏览器的请求头这也是为什么我们做爬虫时一定要修改请求头的一个原因。
使用requests.session()可以帮助我们保存这个会话过程中的所有cookie可以省去我们自己获取上一个请求的cookie然后更新cookie后重新设置再进行请求这类操作。
通过s.cookies 和s.headers设置的整个会话中都会携带的cookie和header。
通过s.get(url1, cookies{r1: r1},headers{h2:h2}) 这种形式设置的cookie和header 不会覆盖s.cookies和s.headers中设置的请求头和cookie只是在此次请求中添加此cookie和header下个请求中不会携带这里的r1和h2。
requests.utils.add_dict_to_cookiejar(s.cookies, {xx: xx}) 可以给s设置固定cookiexx ,这种设置的cookie 不是临时的后面的请求中都会携带。
r1.cookies 的结果是RequestsCookieJar对象可以通过dict对其转换得到一个dict其内容是r1请求响应头中设置的cookie如果当前请求没有被设置新cookie则dict后的是一个空字典。
s.cookies 的结果是整个会话过程通过s发送的所有请求的过程被设置的cookie所有通过dict(s.cookies) 可以得到所有被设置cookie
建议我们再使用的过程中把公共部分提前设置好比如headers、cookies、proxies。
最近使用发现如果整个过程中某些cookie被多次设置直接使用dict强转会失败最稳妥的办法还是使用requests.utils.dict_from_cookiejar(s.cookies)来得到字典类型的cookies。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 软件测试面试小程序
被百万人刷爆的软件测试题库谁用谁知道全网最全面试刷题小程序手机就可以刷题地铁上公交上卷起来
涵盖以下这些面试题板块 1、软件测试基础理论 2、web,app接口功能测试 3、网络 4、数据库 5、linux 6、web,app接口自动化 7、性能测试 8、编程基础9、hr面试题 10、开放性测试题11、安全测试12、计算机基础 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你