2015-04-01 152 views
1

我在写代码尝试使用请求模块获得从网络服务器饼干,但得到的cookie什么让我感到困惑的是:Python的请求模块不响应

  1. 我看到的时候我测试使用邮递员返回饼干 - REST客户端
  2. 我在发送的请求中没有发送任何cookie,但是令我惊讶的是可以在发送的请求中找到我想要的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'} 

机密的原因,我不能在这里展示我真正的cookies数据,但我看到它在我的发送请求,怎么来的?我没有告诉它在我的请求中发送它,这是我期望从响应cookie获得的数据,但是它显示为没有。

回答

1

r.cookies jar包含所有新的cookie,即服务器在当前响应中发送的,所以任何发送的cookie都不会出现在那里,除非服务器发送它们。发送的cookie将出现在r.request.headers(该罐子位于r.request._cookies)。如果您想保留跨多个请求的饼干,用Session

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

当使用会话,你可以通过查看session.cookies检索任何cookie。我不知道为什么当你没有看到cookies时,我不得不看到更多的代码。

+0

感谢您的信息。这是我写的所有代码,服务器是否可以将cookie放入发送请求而不是响应中?因为我期望得到回应。 – 2015-04-02 19:28:44

+0

@MaxLin不,由于发送的cookies仅由发送请求代码处理,所以我不认为交叉污染是可能的。这是否发生在对其他服务器的请求中? – matsjoyce 2015-04-02 21:01:14