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

如何使用R语言httr包实现OAuth2密码授权模式生成访问Token

实现方案

你可以直接用httr::POST完全模拟你终端执行的curl命令获取token,不需要硬套oauth2.0_token的封装逻辑,出错概率更低,配置也更简单:

library(httr)
library(jsonlite)

# 完全对应你的curl命令构造请求
token_resp <- POST(
  url = "https://{website}.com/rest/v2/oauth/token",
  # 直接复用你现有请求头即可
  add_headers(
    `Content-type` = "application/x-www-form-urlencoded",
    Authorization = "Basic xxxyyy123xxx=="
  ),
  # 对应curl的-d参数内容
  body = list(
    grant_type = "password",
    username = "{实际用户名}",
    password = "{实际密码}"
  ),
  encode = "form" # 自动处理x-www-form-urlencoded编码
)

# 校验请求是否成功
stop_for_status(token_resp, "获取token")
# 提取可用的access token
access_token <- content(token_resp)$access_token

获取token后可以直接复用你原来的API调用逻辑:

call <- "https://{website}.com/rest/v2/services/APIService/getRegistryRecordByAccessionID?id={id#}"
df <- as.data.frame(fromJSON(content(httr::GET(call, add_headers(Authorization = paste("Bearer", access_token))), "text"), flatten = TRUE))

如果你需要使用oauth2.0_token函数的配置说明

你之前代码报错的核心问题是缺少密码授权模式的必要配置,正确配置方式如下:

token <- oauth2.0_token(
  endpoint = oauth_endpoint(
    authorize = NULL,
    access = "https://{website}.com/rest/v2/oauth/token"
  ),
  # oauth_app填客户端信息,对应你Basic头解码后`client_id:client_secret`的两段内容
  app = oauth_app(
    appname = "自定义应用名称",
    key = "{客户端ID}", # Basic头Base64解码后冒号前的内容
    secret = "{客户端密钥}" # Basic头Base64解码后冒号后的内容
  ),
  type = "password", # 明确指定为密码授权模式,默认是授权码模式所以会报错
  use_basic_auth = TRUE, # 开启后会自动生成Basic头,不需要手动添加
  # 传入账号密码
  credentials = list(
    username = "{实际用户名}",
    password = "{实际密码}"
  )
)
# 提取token的方式为 access_token <- token$credentials$access_token

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:45:03