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

Groovy使用RESTClient下载CSV返回网页内容的解决方案

问题根因

脚本返回网页而非预期CSV文件,通常由以下问题导致:

  • RESTClient初始化时baseUrl拼写错误:现有代码中https:test.com缺少双斜杠,实际请求会指向错误地址返回默认网页
  • 未指定正确的接收类型:使用ContentType.ANY时,客户端会根据响应头自动解析内容,若服务端返回的头带text/html标识,会直接将响应作为网页文本处理,不会保留文件二进制流
  • 未模拟浏览器请求特征:多数业务站点会校验User-Agent、Accept请求头,非浏览器标识的请求会被拦截,返回预览页/登录跳转页而非文件流
  • 未开启自动重定向:CSV下载接口多数会做302跳转,不跟随重定向会拿到中间跳转页的HTML内容
修复方案

按以下步骤调整代码即可正常下载:

  • 修正baseUrl拼写,补全https://前缀
  • 强制使用二进制类型接收响应,避免RESTClient自动做文本解析转换
  • 显式添加浏览器请求头,明确告知服务端需要接收CSV格式内容
  • 开启自动重定向配置,跟随下载接口的跳转逻辑
  • 直接从响应中取二进制流写入本地文件,不要直接打印响应对象

修正后的可运行代码如下:

import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.BINARY
import java.nio.file.Files
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING

class RestCheck {
    static void main(def args) {
        def sUserName = 'tqqq'
        def sPassword = 'qww'

        // 修正baseUrl拼写错误
        def client = new RESTClient('https://test.com')
        def path = "/changedata"
        client.setProxy('proxy.help.org' , 8080,'http')
        client.auth.basic sUserName, sPassword
        // 开启自动跟随重定向
        client.followRedirects = true
        // 若目标站点使用自签SSL证书,可放开下面这行忽略证书校验
        // client.ignoreSSLIssues()

        try {
            def resp = client.get(
                path: path,
                contentType: BINARY, // 强制按二进制流接收,不做自动文本解析
                headers: [
                    // 模拟浏览器UA,避免被站点拦截返回网页
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
                    // 明确声明可接收的内容类型为CSV
                    'Accept': 'text/csv,application/csv,application/octet-stream,*/*'
                ]
            )
            
            assert resp.status == 200: "请求异常,状态码:${resp.status}"
            // 定义本地文件保存路径
            def savePath = new File('./download_data.csv').toPath()
            // 将响应流写入本地文件
            Files.copy(resp.getData(), savePath, REPLACE_EXISTING)
            println "CSV下载完成,文件保存路径:${savePath.toAbsolutePath()}"
        } catch(Exception e) {
            e.printStackTrace()
        }
    }
}
额外排查点

如果调整后仍返回网页内容,按以下顺序排查:

  • 打印响应的状态码与Content-Type响应头,若为3xx状态码需确认跳转地址是否要求额外携带参数、cookie;若为200但Content-Type为text/html,大概率是认证未通过、UA被拦截,需核对账号密码,补充站点要求的referer、token等必填请求头
  • 确认代理配置正常,部分代理拦截HTTPS请求时会返回认证要求的HTML页面
  • 打开浏览器F12网络面板,对比浏览器正常下载时的请求参数、请求头、cookie,与脚本请求逐一比对补全缺失项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:40:05