Python Request模块没有从响应中获取cookie

时间:2015-04-01 22:42:18

标签: python request

我正在编写代码尝试使用“请求”模块从网络服务器获取Cookie,但令我感到困惑的是:

  1. 我在使用PostMan-REST Client
  2. 进行测试时看到Cookie已恢复
  3. 我没有在我发送的请求中发送任何Cookie,但让我感到惊讶的是,我可以在已发送请求中找到我想要的Cookie。
  4. 我想获取可在代码中使用的cookie数据,以请求其他应用程序。

    以下是我的代码:

    import requests
    import urllib3.contrib.pyopenssl
    urllib3.contrib.pyopenssl.inject_into_urllib3()
    
    username = 'user123'  # real username/password not showing
    password = '1234567'
    
    login_data = {'id':username, 'pass_word':password, 'action': 'login'}
    
    r = requests.post("www.example.com/login/", data=login_data)
    
    print r.cookies 
    print r.request.header['Cookie']
    

    输出:

    <<class 'requests.cookies.RequestsCookieJar'>[]>   # why nothing??
    
    {'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.6.0 CPython/2.7.6 Darwin/14.1.0', 'Connection': 'keep-alive', 'Cookie': 'blahblahblahblah', 'Content-Type': 'application/x-www-form-urlencoded'}
    

    出于保密原因,我无法在此显示我的真实Cookie数据,但我确实在发送请求中看到了它,为什么会这样?我没有告诉它在我的请求中发送它,这是我希望从响应cookie获得的数据,但它显示为无。

1 个答案:

答案 0 :(得分:2)

r.cookies jar包含服务器在当前响应中发送的所有新cookie,因此除非服务器重新发送,否则任何已发送的cookie都不会出现在那里。已发送的Cookie将显示在r.request.headers中(jar位于r.request._cookies)。如果您想在多个请求中保留Cookie,请使用Session

session = requests.Session()
session.get(...)  # Your first request
session.get(...)  # Following requests pass the cookies on

使用会话时,您可以通过查看session.cookies来检索任何Cookie。我不知道为什么你看到你发送的cookie,我必须看到更多的代码。