2016-08-04 126 views
0

我試圖使用python的請求模塊從POST請求中獲取Location值。但是,當我查看響應的標題時,我沒有看到任何這樣的密鑰。使用Google Chrome瀏覽器執行相同的請求確實會顯示密鑰。從響應頭獲取位置

這是我嘗試下載數據的地方:https://data.police.uk/data 。在谷歌瀏覽器中啓動並打開開發者工具。當你選擇一個日期範圍,選擇一些強制並點擊Generate File,你可以看到一個POST請求正在使用Response頭中的Location鍵。

import requests 
from urlparse import urlparse, urljoin 

BASE = 'https://data.police.uk' 
FORM_PATH = 'data' 

form_url = urljoin(BASE, FORM_PATH) 

# Get data download URL 
client = requests.session() 
try: 
    client.get(form_url) 
except requests.exceptions.ConnectionError as e: 
    print (e) 
    sys.exit() 

csrftoken = client.cookies.values() 

l = [('forces', 'cleveland')] 
t = ('csrfmiddlewaretoken', csrftoken[0]) 

d_from = ('date_from', '2014-05') 
d_to = ('date_to', '2016-05') 
l.extend((t, d_from, d_to)) 

r = client.post(form_url, headers=dict(Referer=form_url), data=l) 

查詢響應頭給我:

In [4]: r.headers 
Out[4]: {'Content-Length': '4332', 'Content-Language': 'en-gb', 'Content-Encoding': 'gzip', 'Set-Cookie': 'csrftoken=aGQ7kO4tQ2cPD0Fp2svxxYBRe4rAk0kw; expires=Thu, 03-Aug-2017 22:11:44 GMT; Max-Age=31449600; Path=/', 'Vary': 'Cookie, Accept-Language', 'Server': 'nginx', 'Connection': 'keep-alive', 'Date': 'Thu, 04 Aug 2016 22:11:44 GMT', 'Content-Type': 'text/html; charset=utf-8'} 

問:我如何與響應報頭的Location關鍵?

編輯

答:必須指定l.append(['include_crime', 'on'])。在此之後工作。

+0

你是否檢查了響應的主體?它通常包含所請求的數據。 – trans1st0r

+0

@ trans1st0r:我將如何從請求數據的正文獲取響應標頭? – armundle

+0

嘗試從這裏的一些命令:http://docs.python-requests.org/en/master/user/quickstart/#response-content – trans1st0r

回答

-1

EDIT2

您需要通過include_crime = on聲明爲好,因爲你沒有選擇任何數據集。在網頁上,如果你沒有選擇任何複選框,你會得到相同的頁面,你不會得到任何位置標題。這就是爲什麼你的r.content有「請至少選擇一個數據集」。

+0

不,CSRF驗證爲您提供...... CSRF驗證失敗。請求中止...'有適當的CSRF令牌,我沒有看到任何問題與robots.txt – armundle

+0

它沒有工作,我給了一個適當的令牌夥計,已附加我的程序作爲編輯 –

+0

您可以請張貼您的r.content –