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

如何在R语言网页爬取请求中添加请求头并获取IFC项目动态加载数据

解决IFC项目数据爬取的动态加载与SSL握手问题

嘿,你的思路完全没问题——静态页面拿不到动态数据、API需要请求头这些判断都很准确,现在主要解决SSL握手错误和正确模拟浏览器请求的问题,一步步来:

1. 换用更友好的工具包解决SSL问题

你用的RCurl的getURL在Windows下经常踩SSL证书的坑,推荐换成httr包,它基于curl库,对Windows的证书支持更完善,用法也更直观。先安装加载:

install.packages("httr")
library(httr)
library(jsonlite)

2. 带上浏览器请求头发送API请求

你已经抓到了Firefox的请求头,服务器会校验核心字段(尤其是Origin、Referer和User-Agent),缺了就会拒绝访问。直接用下面的代码:

# 目标API地址
url2 <- "https://disclosuresservice.ifc.org/api/ProjectAccess/SIIProject?projectId=45315"

# 构造请求头,把你抓到的关键字段填进去
request_headers <- add_headers(
  Host = "disclosuresservice.ifc.org",
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0",
  Accept = "application/json, text/plain, */*",
  `Accept-Language` = "de,en-US;q=0.7,en;q=0.3",
  Origin = "https://disclosures.ifc.org",
  Referer = "https://disclosures.ifc.org/",
  `Cache-Control` = "max-age=0"
)

# 发送GET请求,httr会自动处理SSL证书
response <- GET(url2, request_headers)

# 先检查请求是否成功(状态码200就是成功)
stop_for_status(response)

# 解析返回的JSON数据
project_data <- fromJSON(content(response, "text"))

# 看看数据结构,确认拿到了想要的内容
str(project_data)

3. 关键细节说明

  • 为啥不用getURL?:RCurl在Windows下的SSL配置比较麻烦,httr默认会调用系统的证书存储,直接避免了握手失败的问题。
  • 请求头不能少哪些?:Origin和Referer是服务器用来验证请求来源的,User-Agent模拟浏览器身份,这几个是核心;其他字段比如Accept-Language可以根据情况调整,但带上更稳妥。
  • 压缩自动处理:httr会自动处理Accept-Encoding里的gzip/deflate,不用手动设置。

4. 要是还遇到SSL错误的备用方案

如果还是报SSL相关的错,可能是本地证书的问题,可以临时关闭SSL验证(仅限测试,正式爬取不推荐):

response <- GET(url2, request_headers, config(ssl_verifypeer = FALSE))

或者更新你的curl库,确保版本是新的:

install.packages("curl")
library(curl)
# 查看当前curl版本
curl::curl_version()

这样应该就能顺利拿到你需要的项目数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:42:47