【问题标题】:Will the Session() close after terminate the python script?终止 python 脚本后 Session() 会关闭吗?
【发布时间】:2016-06-03 21:01:05
【问题描述】:

我编写了一个简单的 python 代码来登录论坛,以保持活力并获得在线时间。代码如下:

logPara = {'username':user,'password':pwd}
s = requests.Session()
s.post(forumUrl,data=logPara)
homePage = requests.get(pageUrl)

我可以得到正确的主页并确定登录成功。虽然我很好奇这个 Session() 会持续多久?如果我的程序只包含这四行,Session()会关闭从而丢失在线状态吗?

【问题讨论】:

    标签: python session python-requests urllib2


    【解决方案1】:

    是的,会话肯定会丢失。 因此,您有两个使会话持续时间更长的选择,一个是@Seekheart 发布的答案。其次是使用python的pickle将会话状态保存在文件中,并在需要时再次加载。但这也将取决于 cookie 过期等。

    这就是你可以做到的。 发出会话请求时:

    import pickle    
    import requests
    
    logPara = {'username':user,'password':pwd}
    s = requests.Session()
    s.post(forumUrl,data=logPara)
    homePage = requests.get(pageUrl)
    
    with open('temp.dat', 'w') as f:
        pickle.dump(s, f)
    

    当你想稍后恢复状态时:

    import pickle
    
    with open('temp.dat', 'r') as f:
        s = pickle.load(f)
    

    【讨论】:

    • 我理解你的意思,感谢@Seekheart 的快速回复。同时,另一个问题是,当会话关闭时,它会触发“注销”事件吗?在线状态将保持大约 10 分钟,因此我的程序由 Cron 每 5 分钟运行一次。当脚本结束时,似乎触发了“注销”。
    • 脚本无法触发注销,但是当您启动新会话时,先前的状态(cookie)会丢失,这是服务器保持登录状态所必需的。
    • 你的意思是服务器会定期从客户端(浏览器,或python API)请求cookie?另一个问题是,可以在一个脚本中使用多个会话对象吗? s1 = requests.Session() s2 = requests.Session() s1 会被 s2 覆盖吗?谢谢
    • 服务器不会请求cookie,但是当您向服务器发送任何http get或post请求时,cookie需要与请求一起发送,以便服务器识别客户端已登录。是的,两个实例化同一类的两个不同对象非常好。它们不会互相干扰。
    【解决方案2】:

    当您运行脚本时,除非脚本被告知无休止地运行或在某个条件之后运行,否则它几乎会立即终止。因此,对于您的脚本,它会在您运行后结束。要继续运行它,您可以设置一个条件,例如。

    while 1:
         #Run your code
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-17
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2011-08-25
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多