我正在编写代码尝试使用“请求”模块从网络服务器获取Cookie,但令我感到困惑的是:
我想获取可在代码中使用的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获得的数据,但它显示为无。
答案 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,我必须看到更多的代码。