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

Groovy实现带Basic认证的文本文件下载(无需额外库)

Groovy实现Basic认证下载文件(无需额外库)

当然支持!Groovy本身基于Java的标准网络API,完全可以实现你需要的Basic认证文件下载,不需要引入任何第三方库。你的代码思路是对的,只是有几个细节需要调整来确保功能正常。

完整可运行代码示例

下面是修正后的完整代码,包含了正确的认证头生成、流处理和错误检查:

def myUrl = "https://your-target-url.com/file.txt"
def username = "your-domain\\username" // 如果是域账号,直接带域名,注意转义反斜杠;普通账号直接写用户名
def password = "your-password"

new File("test.txt").withOutputStream { out ->
    def conn = new URL(myUrl).openConnection()
    
    // 正确生成Basic认证头:将"用户名:密码"编码为Base64字符串
    def authCredentials = "$username:$password".bytes.encodeBase64().toString()
    conn.setRequestProperty("Authorization", "Basic $authCredentials")
    
    // 检查响应状态,处理认证失败等情况
    if (conn.responseCode == HttpURLConnection.HTTP_OK) {
        // Groovy简洁的流复制写法,替代手动循环读写
        out << conn.inputStream
    } else {
        throw new IOException("下载失败:响应码 ${conn.responseCode} - ${conn.responseMessage}")
    }
}

关键细节说明

  • 认证头生成:你原来的代码里"myusername:mypassword".bytes.encodeBase64()返回的是字节数组,需要调用.toString()转成字符串,否则会导致请求头格式错误。Groovy的encodeBase64()方法是对Java Base64工具的封装,非常方便。
  • 域账号处理:如果需要输入域名\用户名,直接把完整字符串作为用户名即可,注意用双引号时要转义反斜杠(\\),或者用单引号避免转义:'DOMAIN\username'。
  • 流处理优化:Groovy支持out << inputStream这种简洁写法,内部会高效完成流的复制,比手动写read()/write()循环更简洁可靠。
  • 错误检查:加入响应码判断可以快速定位问题,比如401 Unauthorized就说明认证信息有误。

更简洁的小文件写法

如果下载的是小文件,还可以用Groovy更简洁的语法直接获取内容并写入文件:

def myUrl = "https://your-target-url.com/file.txt"
def username = "your-domain\\username"
def password = "your-password"

def authHeader = ["Authorization": "Basic ${($username:$password).bytes.encodeBase64().toString()}"]
new File("test.txt").text = new URL(myUrl).getText(requestProperties: authHeader)

这种写法代码更短,但不适合大文件(会把整个文件加载到内存),大文件还是用流的方式更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:17