Groovy用HttpURLConnection提交Python代码返回400 Bad Request问题求助
问题根因
你遇到的400错误完全是JSON格式非法导致的,核心问题有2个:
- 读取Python脚本的方法错误
f.readLines().toString()会将读取到的每行内容拼接为[行1, 行2, 行3...]格式的列表字符串,不是原始的Python脚本内容,额外增加的方括号、逗号直接破坏了内容结构。 - 手动拼接JSON未做特殊字符转义
你直接把Python脚本内容插入JSON字符串,脚本中的换行符、单双引号、缩进等特殊字符没有做JSON标准转义,会直接打乱整个JSON的结构,服务端解析时就会抛出你收到的语法错误。Python的requests库会自动处理JSON转义,所以用Python提交不会出错。
解决方案
按照以下两步修改代码即可解决:
1. 正确读取Python脚本内容
直接读取文件的完整原始文本,指定UTF-8编码避免乱码:
// 替换原有读取文件的代码 def content = new File("out.py").getText("UTF-8")
2. 使用Groovy内置JsonBuilder生成合法JSON
不要手动拼接JSON字符串,用JsonBuilder自动处理所有特殊字符转义,生成符合标准的payload:
import groovy.json.JsonBuilder // 替换原有手动拼接payload的代码 def jsonBuilder = new JsonBuilder() jsonBuilder { Definition { name("filename") modifiedBy("user_name") active(true) systemId("filename_sid") script(content) // 直接传入原始脚本内容,自动转义 } } String payload = jsonBuilder.toString()
修改完成后直接用你原来的请求逻辑提交即可,无需修改其他HttpURLConnection相关代码。如果需要调试,可以打印生成的payload字符串,确认JSON格式完全符合规范。
内容的提问来源于stack exchange,提问作者Priyabrata Mohanty
相关产品推荐
相关产品推荐

