美文网首页我的收藏python
requests session的作用

requests session的作用

作者: 朝畫夕拾 | 来源:发表于2018-09-18 11:48 被阅读0次

requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数,类似于以下urllib库的使用:

cookie =http.cookiejar.CookieJar()

handler = urllib.request.HttpCookieProcessor(cookie)

opener = urllib.request.build_opener(handler)

然后该opener里面就保存了cookie,以后无论访问该网站的那个网页都是自动的带上同一个cookie,此cookie就是你第一次登陆该网站时的cookie,

opener(url)---url可以使该网站的任意网页,这就是跨请求的意思,请求不同的网站就是跨请求携带同样的cokkie等参数.


如何在requests session中手动设置cookie????

在使用python requests库时遇到一个问题,就是如何在session中设置对所有请求都生效的cookie?requests中的session对象一大特性就是它会自动为你管理cookie,当你登录一个页面时,它可以自动识别response中的set cookie头,然后为下面的请求一直维持这个cookie。不过我在使用的过程中,因为目标网站登录有验证码,所以打算每次运行时手动登录页面获取cookie,然后再把cookie写到代码变量中。这里遇到的问题就是当在get函数中传入cookie变量时,cookie只对当前的请求进行生效,下一次调用get还需要再传入一次cookie,否则发出去的请求是默认不会带有cookie的。

如下:

import requests

import time

mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }

x = requests.session()

x.get("http://127.0.0.1:80",cookies = mycookie)

time.sleep(5)

x.get("http://127.0.0.1:80"

运行脚本后,通过抓包发现,第一次get请求的中含有我自定义的cookie,第二次请求中却没有。因为我要对很多http接口发送请求,所以如果在每个get里面都加入一个cookie变量的话,写起来就有些麻烦了。于是google了一下,找到了如下的解决方法:

import requests

import time

mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }

x = requests.session()

requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})

x.get("http://127.0.0.1:80",cookies = mycookie)

time.sleep(5)

x.get("http://127.0.0.1:80")

这样,通过requests.utils.add_dict_to_cookiejar对session对象设置cookie,之后所有的请求都会自动加上我自定义的cookie内容。

也可以通过requests.utils.cookiejar_from_dict 先生成一个cookiejar对象,时候在赋值给session.cookies。貌似还可以使用session.cookies.set()或者update()。


# session()中方法和requests()中一样

# session.get()  session.post()

session = requests.session()

# 使用session发送post请求获取cookie保存到本地session中。

# 以人人网登录为例。

post_url = "http://www.renren.com/PLogin.do"

headers = {"User-Agent": "Mozilla/5.0"}

session = requests.session()

post_data = {"email": "username", "password": "password"}

session.post(post_url, headers=headers, data=post_data)

# 使用session请求登录后的页面

# 得到登录后的网页内容

url = "http://www.renren.com/xxxxx/profile"

response = session.get(url, headers=headers)

单独处理cookie字段,处理为字典格式

# 处理cookie内容为字典

cookie = "SINAGLOBAL=821034395211.0111.1522571861723; wb_cmtLike_1850586643=1; un=tyz950829@sina.com; wb_timefeed_1850586643=1; UOR=,,login.sina.com.cn; wvr=6; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWsNeq71O_sXkkXNnXFHgOW5JpX5KMhUgL.Fo2RSK5f1hqcShe2dJLoI0qLxK-L12qLB-zLxKqL1hnL1K2LxK-LBo5L12qLxKqL1hML1KzLxKnL1K.LB-zLxK-L1K-LBKqt; YF-V5-G0=c99031715427fe982b79bf287ae448f6; ALF=1556795806; SSOLoginState=1525259808; SCF=AqTMLFzIuDI5ZEtJyAEXb31pv1hhUdGUCp2GoKYvOW0LQTInAItM-ENbxHRAnnRUIq_MR9afV8hMc7c-yVn2jI0.; SUB=_2A2537e5wDeRhGedG7lIU-CjKzz-IHXVUm1i4rDV8PUNbmtBeLVrskW9NUT1fPIUQGDKLrepaNzTEZxZHOstjoLOu; SUHB=0IIUWsCH8go6vb; _s_tentry=-; Apache=921830614666.5322.1525261512883; ULV=1525261512916:139:10:27:921830614666.5322.1525261512883:1525239937212; YF-Page-G0=b5853766541bcc934acef7f6116c26d1"

cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")}

相关文章

  • requests session的作用

    requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了...

  • 爬虫8 自动登录

    import requests,jsonsession = requests.session() 创建会话。 he...

  • 爬取wiki接口记录

    保存cookie的方法:(requests)ses = requests.session()ses.post(ur...

  • requests 内存泄露问题

    使用requests请求时会造成内存泄漏,请求完后内存不会释放。使用requests.Session()则是使用的...

  • requets

    requests.session():维持会话,可以让我们在跨请求时保存某些参数requests.utils.co...

  • (九)接口自动化-处理带有session校验的请求

    服务端如果启用了session,那么需要校验session的接口就会拒绝被调用。针对这个问题,requests模块...

  • 用python写爬虫--2.requests库概述

    Requests Requests我用到的方法主要有3个:get,post,session。 我认为三者主要区别如...

  • Session对象(1)

    session作用:主要用于跟踪会话 session作用域:会话期间 使用session对象来显示跟踪员工的登录账...

  • Session

    在构造函数中,这样设置是全局的。 s = requests.Session()s.headers = {........

  • scrapy 关于session

    在requests用session登陆这篇讲了怎么用同一个session控制cookies以达到登陆的需求,在sc...

网友评论

    本文标题:requests session的作用

    本文链接:https://www.haomeiwen.com/subject/gjqunftx.html