使用httr2实现OAuth 1.0认证遇问题,求技术指导
使用httr2实现Gun Violence Archive API的OAuth 1.0认证
你遇到的"request must be signed"错误,是因为手动构造OAuth头时签名生成逻辑有误,或是timestamp、nonce这类动态参数未正确生成。httr2内置了OAuth 1.0的标准化处理工具,能自动完成签名、动态生成必要参数,无需手动拼接请求头。
完整实现步骤
第一步:安装并加载httr2
未安装的话先执行:install.packages("httr2") library(httr2)第二步:配置OAuth 1.0认证凭据
将你的实际API凭据替换到占位符中:# 替换为你的真实凭据 consumer_key <- "YOUR_CONSUMER_KEY" consumer_secret <- "YOUR_CONSUMER_SECRET" access_token <- "YOUR_ACCESS_TOKEN" token_secret <- "YOUR_TOKEN_SECRET"第三步:构建请求并添加OAuth 1.0认证
httr2的req_oauth_oauth1()函数会自动处理签名、timestamp、nonce等核心参数,无需手动构造请求头:# 构建基础请求 req <- request("https://api.gunviolencearchive.org/api/incidents.json") %>% # 添加查询参数 req_url_query( pagesize = 40000, `filters[IncidentDate][method]` = "is year", `filters[IncidentDate][field][date-year]` = 2015, truncation_limit = 0 ) %>% # 注入OAuth 1.0认证信息 req_oauth_oauth1( consumer_key = consumer_key, consumer_secret = consumer_secret, token = access_token, token_secret = token_secret )第四步:添加节流控制
根据API要求添加请求频率限制,示例为每分钟最多5次请求(可根据官方限制调整):req <- req %>% req_throttle(rate = 5 / 60) # 格式为「请求数/时间秒数」第五步:发送请求并处理响应
执行请求并解析返回的JSON数据:# 发送请求 res <- req_perform(req) # 解析JSON响应 data <- resp_body_json(res) # 查看数据结构 str(data)
关键说明
req_oauth_oauth1()会严格遵循OAuth 1.0规范生成签名和动态参数,避免手动构造时的格式错误。- 节流控制的频率需参考Gun Violence Archive API的官方限制调整,避免触发限流机制。
- 原代码中的Cookie属于浏览器会话临时值,API认证无需携带,可直接移除。
内容的提问来源于stack exchange,提问作者Olga Pierce
相关产品推荐
相关产品推荐

