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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:55:24