python 请求 link headers

python requests link headers

我正在尝试找到捕获响应 headers 下列出的 link 的最佳方法,就像这个一样,我正在使用 python 请求模块。下面是 link,它在 Python 请求页面上有 Link Headers 部分: 文档.python-requests.org/en/latest/user/advanced/

但是,就我而言,我的回复 headers 包含 link,如下所示:

{'content-length': '12276', 'via': '1.1 varnish-v4', 'links': '<http://justblahblahblah.com/link8.html>;rel="last">,<http://justblahblahblah.com/link2.html>;rel="next">', 'vary': 'Accept-Encoding, Origin'}

请注意 > 在 "last" 之后,在请求示例下情况并非如此,我似乎无法弄清楚如何解决这个问题。

您可以手动解析 header 的值。为了使事情更容易,你可能想使用请求的解析函数 parse_header_links 作为参考。

或者你可以做一些 find/replace 并使用原始 parse_header_links

In [1]: import requests

In [2]: d = {'content-length': '12276', 'via': '1.1 varnish-v4', 'links': '<http://justblahblahblah.com/link8.html>;rel="last">,<http://justblahblahblah.com/link2.html>;rel="next">', 'vary': 'Accept-Encoding, Origin'}

In [3]: requests.utils.parse_header_links(d['links'].rstrip('>').replace('>,<', ',<'))
Out[3]:
[{'rel': 'last', 'url': 'http://justblahblahblah.com/link8.html'},
 {'rel': 'next', 'url': 'http://justblahblahblah.com/link2.html'}]

如果 >,< 之间可能有一个或两个 space,那么您需要用正则表达式替换。

requests 已经提供了一种访问链接的方法 header

response.links

它 returns 链接字典 header 可以使用

轻松进一步解析的值
response.links['next']['url']

获取所需的值。