2015-04-01 150 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