2013-08-06 53 views
0

我試圖使用requests庫登錄到網站,並且它不像通常那樣工作。使用Python請求訪問時,網站沒有設置csrftoken cookie

我希望該網站能爲它發送的cookie通過瀏覽器訪問時:

csrftoken: Bl5DOVcUge5VeRv771nAIUNbxmm9Z9l2 

然而,所有我收到如下:

__cfduid: d2f8e300a0b867e8a6147462f3977f8b11375815648197 for .example2.net/ 

這一個是工作,我預計:

agent1 = requests.session() 
agent1.get('https://example1.com/') 
print agent1.cookies 

返回:

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie example1session=6ce1fa7fc23669078c9cf86001b34c4f for .example1.com/>, <Cookie countrycode=FR for example1.com/>, <Cookie csrftoken=ETcsKwBgUkPxPjgN6hJaOXv5byIL15mE for example1.com/>, <Cookie lat=46.0 for example1.com/>, <Cookie lon=2.0 for example1.com/>]> 

這一個不:

agent2 = requests.session() 
agent2.get('https://www.example2.net') 
print agent2.cookies 

它返回:

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie __cfduid=d14644e3e542bf4165a0714c0e77d04eb1375816707171 for .example2 

__cfduid cookie是與現場運行背後的CloudFlare DDOS保護服務做。這可能與這個問題有關嗎?

回答

1

我發現了類似的問題。在我的情況下,我試圖登錄到一個URL的POST和服務器重定向我。在這個重定向期間,Cookie被設置了(正如我在瀏覽器中看到的那樣),但是在我的python程序中沒有設置cookie。

我發現定義一些類似於瀏覽器的標頭並禁用重定向可以解決這個問題。

headers = { 
     'Host': 'www.example.net', 
     'Origin': 'http://www.example.net', 
     'Referer': 'http://www.example.net/', 
     'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'} 

session = requests.Session() 
session.headers = headers 

session.post('http://www.example.net/login/', data=values, allow_redirects=False) 
+0

我希望能夠測試和接受這個答案,但該網站早已改變其登錄方法。我會留下這個問題,因爲這個答案可能會幫助別人。 –

相關問題