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

API端点浏览器可访问,R语言GET请求返回401未授权问题求助

解决R中GET调用NY参议院API返回401的问题

第一步:修正URL拼接错误

你当前的URL拼接会生成类似https://legislation.nysenate.gov/api/3/bills/search?term=A6156//?key=xxx的错误格式,双斜杠和重复的?会导致参数识别失败,这是触发401的原因之一。正确的多参数拼接应该用&连接,或者直接用query参数传递,避免手动拼接出错:

方式1:手动修正拼接逻辑

base <- "https://legislation.nysenate.gov"
searchbill <- paste0("/api/3/bills/search?term=", data$name1[i], "&key=", key)
searchresult <- GET(paste0(base, searchbill))

方式2:用query参数规范传递(更推荐)

searchresult <- GET(
  url = paste0(base, "/api/3/bills/search"),
  query = list(
    term = data$name1[i],
    key = key
  )
)

第二步:处理会话认证(Cookie)

从你登出浏览器就无法访问的情况来看,这个API不仅需要API key,还依赖登录后的会话Cookie。你需要先模拟登录获取有效Cookie,再带着Cookie发起请求:

  1. 获取登录所需参数:打开浏览器开发者工具,在登录页面提交登录操作,查看POST请求的表单参数(通常包含username、password,还有可能需要csrf_token这类验证字段)。
  2. 模拟登录并保存会话:
# 创建会话对象,自动保存Cookie
session <- httr::handle(base_url = base)

# 先提取CSRF令牌(如果登录页面要求)
library(rvest)
login_page <- read_html(paste0(base, "/login"))
csrf_token <- login_page %>% html_element("input[name='csrf_token']") %>% html_attr("value")

# 发送登录请求,替换成实际的登录接口和参数
httr::POST(
  url = paste0(base, "/login"), # 替换为实际登录接口路径
  handle = session,
  body = list(
    username = "你的登录用户名",
    password = "你的登录密码",
    csrf_token = csrf_token
  ),
  encode = "form"
)

# 用同一个会话发起API请求,自动携带登录后的Cookie
searchresult <- GET(
  url = paste0(base, "/api/3/bills/search"),
  handle = session,
  query = list(
    term = data$name1[i],
    key = key
  )
)

验证请求结果

请求完成后,可以用以下代码查看状态码和返回内容:

# 查看状态码,200表示成功
httr::status_code(searchresult)
# 查看返回内容
httr::content(searchresult)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:12:19