【问题标题】:add a cookie to requests session向请求会话添加 cookie
【发布时间】:2020-10-23 02:13:30
【问题描述】:

我想在开始第一个请求之前启动一个requests.Session() 并添加一个 cookie。我希望有一个 cookie 参数或类似的东西来做这个

def session_start()
    self.session = requests.Session(cookies=['session-id', 'xxx'])

def req1():
    self.session.get('example.org')

def req2():
    self.session.get('example2.org')

但这不起作用,我只能在.get() 方法中提供cookies。我是否需要在 session_start() 中执行“虚拟请求”,或者有没有办法在开始实际请求之前准备 cookie?

【问题讨论】:

  • 这能回答你的问题吗? How to use cookies in Python Requests
  • 不是真的,我有一个来自登录的会话 ID,我想再次使用它,但我想在使用 requests.Session() 创建会话时设置它,而不仅仅是在我这样做的时候第一个请求

标签: python session cookies


【解决方案1】:

因此,会话对象将保留 url 请求自己设置的任何 cookie,但如果您提供 cookie 作为参数,它将不会在下一个请求中保留。

您可以手动添加仍然存在的 cookie,但来自文档: “如果您想手动将 cookie 添加到会话中,请使用 Cookie 实用程序功能来操作 Session.cookies。” https://requests.readthedocs.io/en/master/user/advanced/#session-objects

关于如何操作 cookie 的链接:https://requests.readthedocs.io/en/master/api/#api-cookies

【讨论】:

    【解决方案2】:

    来自documentation

    但是,请注意,即使使用会话,方法级参数也不会在请求之间保持不变。这个例子只会发送第一个请求的 cookie,而不是第二个:

    s = requests.Session()
    
    r = s.get('https://httpbin.org/cookies', cookies={'from-my': 'browser'})
    print(r.text)
    # '{"cookies": {"from-my": "browser"}}'
    
    r = s.get('https://httpbin.org/cookies')
    print(r.text)
    # '{"cookies": {}}'
    

    【讨论】:

    • 好吧,这不是我的问题的真正答案 :) 无论如何,这应该不是问题,因为我的响应将再次返回会话 cookie
    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多