恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
requests 的 Link Header 怎么解析?用 r.links 遍历 API 分页链接
首页
资讯中心
/
requests 的 Link Header 怎么解析?用 r.links 遍历 API 分页链接
requests 的 Link Header 怎么解析?用 r.links 遍历 API 分页链接
发布时间:2026/9/9 13:03:57
requests 的 Link Header 怎么解析用 r.links 遍历 API 分页链接【免费下载链接】requestsA simple, yet elegant, HTTP library.项目地址: https://gitcode.com/GitHub_Trending/re/requests很多 HTTP API文档中举的例子是 GitHub API会在响应头里带一个LinkHeader用来标记next、last等分页链接让接口具备自描述和可发现性。手工去 split 这个头既繁琐又容易出错而 requests 会自动解析它请求拿到响应后直接访问r.links就能按rel取值并用它逐页遍历分页接口。本文的完整路径是发出请求 → 查看原始link头 → 用r.links取出各分页链接 → 按next循环翻页。准备环境文档给出的安装方式是在终端执行$ python -m pip install requests安装后即可import requests使用。参见 安装文档。先看原始 Link Headerr.headers[link]官方文档在 advanced.rst 的 Link Headers 一节 用 GitHub API 做示例。先对第一页发一个 HEAD 请求再直接读原始头 url https://api.github.com/users/kennethreitz/repos?page1per_page10 r requests.head(urlurl) r.headers[link] https://api.github.com/users/kennethreitz/repos?page2per_page10; relnext, https://api.github.com/users/kennethreitz/repos?page6per_page10; rellast以上为文档示例输出。可以看到原始头就是一段用逗号分隔、url; rel...形式拼接的字符串每个...里是链接 URL后面的rel参数说明它的角色。用 r.links 取解析后的分页链接Requests 会自动解析这些 link header结果挂在响应的links属性上。文档示例 r.links[next] {url: https://api.github.com/users/kennethreitz/repos?page2per_page10, rel: next} r.links[last] {url: https://api.github.com/users/kennethreitz/repos?page7per_page10, rel: last}文档示例输出。r.links是一个字典键是每条链接的rel值如next、last如果某条链接没有rel则用它的 URL 作键见 links 属性实现 中key link.get(rel) or link.get(url)。值是包含url、rel以及头中其他参数如type的字典。响应头里没有link时r.links返回空字典不会报错底层 parse_header_links 对空输入返回空列表。同一个rel出现多次时字典赋值会让后面的条目覆盖前面的。按 next 遍历 API 分页链接基于上面的结构翻页就是一个「取next的 URL → 请求 → 再取next」的循环。示例写法需将 URL 换成你要访问的分页 APIwhile循环依赖该 API 在还有下一页时继续提供relnext条目import requests url https://api.github.com/users/kennethreitz/repos?page1per_page10 r requests.get(url) while next in r.links: r requests.get(r.links[next][url]) # 在这里处理第 r.headers 对应页面的数据比如 r.json()每轮循环中r.links[next][url]就是下一页的完整 URL直接作为下一次请求的地址当某一页之后服务端不再给出relnext条目时next in r.links为假循环结束。解析规则与仓库内的行为基准如果你想确认解析细节两处实现和测试可作为依据parse_header_links按, *拆分多个条目每条先取...里的 URL 存为url键再按;拆出参数逐个写进该条目的字典。仓库测试 test_parse_header_links 给出了多个输入到输出的对照例如http:/.../front.jpeg; relfront; typeimage/jpeg解析为[{url: http:/.../front.jpeg, rel: front, type: image/jpeg}]空字符串解析为[]。test_links 直接构造带link头的requests.Response并断言r.links[next][rel] next这是r.links行为的最小基准。如果你已经克隆了 requests 源码仓库并装好了开发环境可以运行python -m pytest tests/test_requests.py -k test_links作为验证不克隆仓库的话最直接的方式仍是打印r.links对照上面文档示例的结构键为rel、值含url和rel判断解析是否符合预期。两点边界文档示例中原始头里的last是page6而r.links[last]的示例输出是page7两处数字不一致它们都是文档中的示例输出不代表固定预期实际值以你请求到的响应头为准。r.links的键取决于rel所以只能按服务端声明的rel取值某条链接没有rel时会以 URL 作键用r.links[next]访问不存在的键会抛KeyError循环前建议用next in r.links判断。【免费下载链接】requestsA simple, yet elegant, HTTP library.项目地址: https://gitcode.com/GitHub_Trending/re/requests创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考