2016-08-04 3 views
0

Я пытаюсь получить значение Location из запроса POST с использованием модуля запросов python. Однако, когда я смотрю заголовки ответа, я не вижу такого ключа. Выполнение одного и того же запроса с помощью Google Chrome показывает ключ.Получить местоположение из заголовка ответа

Здесь я пытаюсь загрузить данные: https://data.police.uk/data . Запустите это в Google Chrome и откройте Инструменты разработчика. Когда вы выбираете диапазон дат, выберите силу и нажмите Generate File, вы можете увидеть запрос POST, сделанный с помощью ключа 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 ключ из заголовка ответа?

EDIT

Ответ: Если бы указать 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. Request aborted ... 'С правильным токеном CSRF, я не вижу никаких проблем с robots.txt – armundle

+0

, он не работал, я дал правильного маркера, добавил мою программу в качестве редактирования –

+0

Можете ли вы разместить свой r.content –

Смежные вопросы