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

在R中调用JSON REST API认证时如何获取会话令牌

问题根源分析

你的问题出在请求体的编码格式不匹配:你用httr的POST时指定了encode = "form",这会把登录数据编码成表单格式(application/x-www-form-urlencoded)发送,但服务器实际需要的是JSON格式的请求体(对应你curl命令里的-H "Content-Type: application/json")。虽然服务器返回了200 OK,但因为请求格式不对,没有返回你需要的_id令牌。

修正后的R代码

1. 正确发送JSON格式的登录请求

library(httr)

# 准备登录数据
login <- list(
  email = "my@email.com",
  password = "mypass"
)

# 发送POST请求,指定JSON编码(自动设置Content-Type: application/json)
res <- POST(
  url = "https://dashboard.server.eu/login",
  body = login,
  encode = "json",  # 关键:用JSON编码替代form
  verbose()         # 可选,用来查看请求详情,确认Content-Type是否正确
)

# 解析响应内容成JSON对象
response_content <- content(res, "parsed")

# 提取_id令牌
token <- response_content$`_id`
cat("拿到的会话令牌:", token, "\n")

2. 携带令牌发起后续GET请求

对应你提供的AngularJS示例,用httr实现的代码如下:

# 构造请求头
auth_headers <- add_headers(
  Authorization = paste0("Session ", token),
  `content-type` = "application/json;charset=UTF-8",
  accept = "application/json,text/plain"
)

# 发送GET请求
data_res <- GET(
  url = "https://dashboard.server.eu/",
  auth_headers
)

# 解析返回的数据
result_data <- content(data_res, "parsed")
验证请求格式的小技巧

你可以通过verbose()输出的日志,确认请求的Content-Type是否为application/json——这是和你原来的代码最核心的区别。curl命令里明确指定了这个头,所以能正确拿到令牌,修正后的R代码也会自动设置这个头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:37:35