You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在rvest已认证会话中下载PDF文件

解决方案

问题原因

download.file() 是独立发起HTTP请求的函数,不会共享rvest会话中存储的登录态Cookie、身份校验头等信息,因此会被服务器判定为未登录请求,返回登录页HTML。而你调用session_submit()后返回的会话对象已经包含了完整的PDF二进制响应数据,不需要重复发起下载请求。

修复后的代码

# 登录DLG档案库
login <- "https://dlgarchiv.lv.de/pdf/616694ca9b67fDLG_14-19_10_2021.pdf"
pgsession <- session(login)
pgform <- html_form(pgsession)[[1]]
filled_form <- html_form_set(pgform, customerno="*******", plz="*****")
# 接收提交表单后返回的会话对象,该对象已包含PDF资源
pdf_session <- session_submit(filled_form)

# 直接从会话中提取二进制内容写入本地文件
writeBin(pdf_session$content, con = "test.pdf", useBytes = TRUE)

扩展用法(同会话多文件下载)

如果需要在同一个登录会话中下载多个PDF,不需要重复登录,直接复用已验证的会话发起请求即可:

# 示例:下载同一会话下的第二个PDF
second_pdf_url <- "第二个PDF的资源链接"
second_pdf_session <- session_jump_to(pdf_session, second_pdf_url)
writeBin(second_pdf_session$content, con = "second.pdf", useBytes = TRUE)

注意事项

  • 写入文件后如果无法正常打开PDF,可先打印pdf_session$response$headers$content-type``校验返回内容类型,确认是application/pdf再存储。
  • 会话存在有效期限制,批量下载时不要间隔太久,避免登录态失效。

内容的提问来源于stack exchange,提问作者zielonygrzyb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:00