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

使用httr/httr2无法获取目标PDF,浏览器可打开求解决方案

解决R语言httr/httr2获取目标PDF的问题

核心原因

服务器返回HTML而非PDF,基本是因为请求头不匹配浏览器标准(比如缺少浏览器标识),或是需要携带会话Cookie——浏览器访问时会自动维护会话状态,而直接发送GET请求没有这些上下文信息。

可行解决方案

1. 模拟浏览器请求头(httr版)

给请求添加浏览器的User-Agent等关键头信息,让服务器识别为合法浏览器访问:

library(httr)

url1 <- "https://processo.stj.jus.br/processo/dj/documento/?=&sequencial=300060606&num_registro=202500087810&data=20250313&data_pesquisa=20250313&componente=MON"

# 复制Chrome浏览器的请求头信息
browser_headers <- add_headers(
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
  `Accept` = "application/pdf, text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  `Accept-Language` = "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7"
)

response <- GET(url1, browser_headers)

# 检查响应类型并保存PDF
if (grepl("application/pdf", response$headers$`content-type`)) {
  writeBin(content(response, "raw"), "alvo.pdf")
  cat("PDF已成功保存为alvo.pdf\n")
} else {
  cat("仍返回HTML,建议尝试会话Cookie方案\n")
}

2. 先获取会话Cookie再请求(httr版)

部分网站需要先建立会话再请求文档,用session对象自动维护Cookie:

library(httr)

# 创建会话,自动处理Cookie
stj_session <- session()

# 先访问STJ主页初始化会话
stj_session <- session_jump_to(stj_session, "https://www.stj.jus.br/")

# 用会话请求目标PDF
response <- session_jump_to(stj_session, url1)

# 保存PDF
if (grepl("application/pdf", response$response$headers$`content-type`)) {
  writeBin(content(response$response, "raw"), "alvo.pdf")
  cat("PDF已保存\n")
} else {
  cat("返回内容类型:", response$response$headers$`content-type`, "\n")
}

3. httr2实现方案

httr2语法更简洁,同样需要模拟浏览器头:

library(httr2)

url1 <- "https://processo.stj.jus.br/processo/dj/documento/?=&sequencial=300060606&num_registro=202500087810&data=20250313&data_pesquisa=20250313&componente=MON"

# 构建请求并执行
resp <- request(url1) %>%
  req_headers(
    `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
    `Accept` = "application/pdf,*/*;q=0.9"
  ) %>%
  req_perform()

# 保存到本地
resp_body_raw(resp) %>% writeBin("alvo.pdf")
cat("PDF文件已生成\n")

额外提示

如果以上方法仍失败,打开浏览器开发者工具的Network面板,复制浏览器请求该PDF时的全部请求头,完全照搬进代码里即可。同时注意遵守网站使用规则,避免频繁请求导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:52:16