【发布时间】:2016-08-04 22:13:48
【问题描述】:
我正在尝试使用 python 的请求模块从 POST 请求中获取 Location 值。但是,当我查看响应的标题时,我没有看到任何这样的键。使用 Google Chrome 执行相同的请求确实会显示密钥。
这是我尝试从以下位置下载数据的地方:https://data.police.uk/data
.在 Google Chrome 中启动它并打开开发者工具。当您选择日期范围时,选择一些力并单击Generate File,您可以看到在响应标头中使用Location 键发出POST 请求。
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'])。在此之后工作。
【问题讨论】:
-
您是否检查了响应的正文?它通常包含请求的数据。
-
@trans1st0r : 如何从请求数据的正文中获取响应标头?
-
我知道在哪里查找文档;我的评论更多地是关于从请求的数据中获取响应标头的概念对我来说没有多大意义。
-
我的意思是当你通过 http 请求数据时,你会得到一个包含标题部分和正文部分的响应。您需要的信息更有可能在似乎是
r.content的正文中。你试过输出 r.content 吗?