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

Groovy如何为URL()/JsonSlurper()添加认证解决401未授权问题

问题原因与正确实现

你两个实现返回401的核心原因有3个:

  • 第一个方案错误使用了不存在的User请求头:curl的--user "username:apitoken"是命令行参数,作用是自动生成标准HTTP Basic认证的Authorization头,不是向服务端传名为User的请求字段,这个头对GitHub服务端完全无效。
  • 第二个方案的Base64编码结果未转字符串:Groovy中byte[].encodeBase64()返回的是字节数组对象,直接拼接进字符串会得到类似[B@2d38f12a的对象地址字符串,不是合法的Base64认证串。
  • 两个方案都遗漏了curl命令中携带的Accept: application/vnd.github.v3+json请求头,多数GitHub Enterprise实例开启了API版本强制校验,缺少该头时即使认证信息正确也会被拦截返回401。

可直接运行的正确代码

import groovy.json.JsonSlurper

// 生成合法的Basic认证串,编码后必须转成字符串
def authStr = "${gitApiUser}:${gitApiToken}".getBytes("UTF-8").encodeBase64().toString()
def requestUrl = "${gitUrl}/api/v3/repos/projectname/reponame/pulls?page=${page}&state=all&sort=recentupdate"

String json = new URL(requestUrl).getText(
    requestProperties: [
        "Accept": "application/vnd.github.v3+json",
        "Content-Type": "application/json",
        "Authorization": "Basic ${authStr}"
    ]
)
prData = new JsonSlurper().parse(json.bytes)

如果当前Groovy版本对URL的getText传参兼容性不好,可以换用更稳定的HttpURLConnection写法,避免框架层面的参数透传问题:

import groovy.json.JsonSlurper

def authStr = "${gitApiUser}:${gitApiToken}".getBytes("UTF-8").encodeBase64().toString()
def requestUrl = "${gitUrl}/api/v3/repos/projectname/reponame/pulls?page=${page}&state=all&sort=recentupdate"

def conn = new URL(requestUrl).openConnection() as HttpURLConnection
conn.setRequestMethod("GET")
conn.setRequestProperty("Accept", "application/vnd.github.v3+json")
conn.setRequestProperty("Content-Type", "application/json")
conn.setRequestProperty("Authorization", "Basic ${authStr}")

String json = conn.inputStream.getText("UTF-8")
prData = new JsonSlurper().parse(json.bytes)

额外注意点

  • 认证串编码统一用UTF-8即可,不需要使用iso-8859-1,GitHub官方文档明确要求Basic认证的用户名密码串使用UTF-8编码后做Base64转换。
  • 如果使用GitHub个人访问令牌(PAT),也可以省略用户名拼接步骤,直接用Authorization: Token ${yourPatToken}的头格式,不需要手动做Base64编码,写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:09:31