Genexus 16 U10 Java Web调用外部API取token时响应体截断问题
问题根因
你在代码中手动添加了Accept-Encoding: gzip, deflate, br请求头,告知服务端可以返回压缩后的响应内容。Postman会自动对gzip、br等压缩格式的响应做解压处理,所以你能看到完整的明文响应;但Genexus原生HTTPClient(17及更早版本为主)默认不会自动处理压缩响应,你直接调用&httpclient.ToString()是把压缩后的二进制流强制转为字符串,自然会出现截断、乱码,无法正常解析JSON。
解决方案
- 优先尝试删除代码中手动添加的
Accept-Encoding请求头:Genexus HTTPClient默认不会发送该请求头,服务端会返回未压缩的明文响应,此时调用&httpclient.ToString().Trim()即可拿到完整的响应内容。 - 如果业务要求必须开启压缩传输:请使用
&httpclient.ResponseBody属性获取响应的原始字节数组,根据响应头的Content-Encoding值选择对应的解压算法(gzip/br/deflate)对字节数组做解压后,再转为字符串即可。 - 检查变量长度限制:确认存储响应的
&auxResponse变量为长文本类型,若为定长字符型变量,长度不足时会自动截断长响应内容。 - 规避弹窗显示干扰:Genexus自带的
msg()弹窗本身有内容长度限制,不要用它判断响应是否被截断,建议将响应内容写入本地日志文件或者输出到控制台确认实际完整度。
内容的提问来源于stack exchange,提问作者Javier de Innocenti
相关产品推荐
相关产品推荐

