在启动python程序时,有没有在前一个会话中获取?
我已将会话设置为全局变量,以便可以通过任何需要它的方法访问它。但是,我猜测当我再次启动程序时会重置会话变量。
启动程序时有没有办法回到上一个会话?
session = requests.Session()
def auth():
session = self.session
url = 'this url has auth'
session.post(url, data=data)
# Now authentcated so lets grab the data
call_data(sessions)
def call_data(session)
url = 'this url has the data'
session.post(url, data=data)
def check_data()
url = 'this url does a specific call on data elements'
self.session.post(url, data=data)
当我第二次加载程序时,我只想使用check_data方法,我不希望每次启动程序时都不需要auth,或者我只是好奇地看到如果可以的话;)
修改 我已用接受的答案更新了我的解决方案。
def auth():
session = self.session
session.cookies = LWPCookieJar("cookies.txt")
url = 'this url has auth'
session.post(url, data=data)
# Now authentcated so lets grab the data
call_data(sessions)
session.cookies.save() #Save auth cookie
def some_other_method():
if not cookie:
session.cookies.load()
# do stuff now that we're authed
代码显然没有为其他方法显示正确的访问者,但这个想法很好。 有兴趣知道这是否是保持authed的唯一方法。
答案 0 :(得分:1)
通过cookie在http中跟踪会话。您可以通过存储在http.cookiejar.LWPCookieJar
在您的计划开始时,您必须将cookieJar
设置为此FileCookieJar
并加载现有的Cookie(如果有的话)
import requests
from http.cookiejar import LWPCookieJar
session = requests.Session()
session.cookies = LWPCookieJar("storage.jar")
session.cookies.load()
关闭程序之前,您必须将它们保存到文件
session.cookies.save()
请注意,默认情况下,它与浏览器具有相同的行为不保存会话Cookie,如果您想要一个不同的行为,那么这些Cookie会在重新启动时未设置为您的浏览器,只需要精确通过将ignore_discard
参数设置为False
来实现save()
方法
session.cookies.save(ignore_discard=False)
答案 1 :(得分:0)
您不清楚尝试建立什么类型的会话。 Django的?烧瓶?有些不同? 还要注意,似乎拼写错误的call_data(sessions),其中只定义了session(没有s)。