“invalid character ‘\x1f‘ looking for beginning of value“ 报错解决方法
目录
问题背景
分析方法
问题原因
问题背景
这个问题来源于我在开启kubectl proxy代理的时候,通过kubectl apply -f xxx.yaml向代理提交一个configMap对象,返回了 "Error while proxying request: invalid character '\x1f' looking for beginning of value" 的报错。
分析方法
我通过打印请求,得到了 kubectl apply -f xxx.yaml 的基本流程:
- 首先,会发起一个 GET /openapi/v2 的请求
- 然后会发起一个 POST 请求,并且 body 中内容就是 yaml 文件的内容。
通过查询这个问题出现的原因得知,出现的原因是解析接口返回的字节符切片错误,出现了一堆乱码。解析失败是因为请求在 Header 里加入了Accept-Encoding: gzip,导致返回的结果被 gzip 压缩,然后返回的结果无法通过正常的 ioUtil.ReadAll(rsp.Body) 取出的内容去反序列化。
具体的解决手法参考见 invalid character '\x1f' looking for beginning of value
问题原因
沿着这个思路,我在开启的代理代码里面发现了一段返回结果的拦截
func (mtp *MyTransport) RoundTrip(req *http.Request) (*http.Response, error) {rsp, err := mtp.RoundTripper.RoundTrip(req)if err != nil {return nil, err}defer rsp.Body.Close()b, err := ioutil.ReadAll(rsp.Body) //读取后,rsp body内容将就空了。需要重新赋值回去if err != nil {return nil, err}//序列化对象obj := unstructured.Unstructured{}if err = obj.UnmarshalJSON(b); err == nil {addCustomColumn(&obj, req)b, err = obj.MarshalJSON()if err != nil {return nil, err}} else {return nil, err}rsp.Body = ioutil.NopCloser(bytes.NewReader(b)) //tips 给body赋值的方法fmt.Println("响应对象类型:" + obj.GetKind())rsp.Header.Set("Content-Length", strconv.Itoa(len(b))) //这个很重要,如果修改了body内容需要重新计算长度return rsp, nil
}
原因是因为我需要在 kubectl get xxx 的时候对返回的结果反序列后修订内容,再序列化后返回。
参考网上的解决方法,方法一是删除 Header 中的 Accept-Encoding: gzip,方法二是添加一段读取 gzip 压缩内容 Body 的代码
if req.Header.Get("Accept-Encoding") == "gzip" {gr, err = gzip.NewReader(rsp.Body)if err != nil {return nil, err}
}
两种方法都没能成功,同样返回 "invalid character '\x03' looking for beginning of value"。
最后想到了,我其实并不需要为 /openapi/v2 这类的请求加工处理返回结果,所以只要跳过反序列化就可以,因此在 RoundTrip 中加入
//针对openapi做处理
if regexp.MustCompile(OpenApiPattern).MatchString(req.RequestURI) {return rsp, nil
}
最后 kubectl apply -f xxx.yaml 测试 ,通过。
“invalid character ‘\x1f‘ looking for beginning of value“ 报错解决方法相关推荐
- 导入 SQL 时出现 Invalid default value for ‘create_time‘ 报错解决方法
导入 SQL 时出现 Invalid default value for 'create_time' 报错解决方法 参考文章: (1)导入 SQL 时出现 Invalid default value ...
- fatal: --author 'invalid author' is not 'Name email' and matches 报错解决
fatal: –author 'invalid author' is not 'Name ' and matches 报错解决 一般修改一下用户名和邮箱就可以了 //git 修改当前的project的 ...
- Dangling meta character '+' near index 0 + 报错 解决方法
1.split方法转化字符串为数组: String[] str=reader.readLine().split("+"); 报错: Exception in thread &quo ...
- docker 报错 error: invalid character ‘\x00‘ looking for beginning of value
执行docker build的时候报错:error: invalid character '\x00' looking for beginning of value. 环境: Docker versi ...
- UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc0 in position 0: invalid start byte报错解决
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte报错解决 这个错误一 ...
- tomcat配置SSL报错解决:java.lang.IllegalArgumentException: Invalid character (CR or LF) found in method nam
使用CAS单点登陆时,在tomcat的server.xml中配置了https协议的证书认证,但访问时报错: INFO [http-nio-8443-exec-4] org.apache.coyote. ...
- 导入sql时出现Invalid default value for ‘create_time‘报错处理方法
(上图是初始的sql文件的内容) 在开发微信小程序时,需要导入.sql文件,但是最一开始导入的时候没有任何改动进行了导入,报错如下 PS E:\weichatApp\my-project\server ...
- Python-logging报错解决:UnicodeEncodeError: 'gbk' codec can't encode character '\u' in position: illegal
我在Python3 中使用Logging模块把日志打到终端输出时会报错. 代码如下: import logging logging.basicConfig(level=logging.INFO,fil ...
- Maven报错解决:Element 'dependency' cannot have character [children], because the type's content type is
在用maven的时候遇到报错: Element 'dependency' cannot have character [children], because the type's content ty ...
最新文章
- ThreadLocal可以解决并发问题吗
- b站上java和python视频可以吗_b站有哪些好的java视频?
- Python类与对象技巧(1):字符串格式化、封装属性名、可管理的属性、调用父类方法
- 【数据竞赛】5行代码提升GBDT,提升巨大!
- 操作系统页面置换算法
- Linux下如何定位Java进程CPU利用率过高原因
- HTML5 API详解(3):为何网页上要增加Battery电池状态API
- Apache服务器的下载与安装
- 页面跳转与重定向(之一)
- 多数人只有一种工资收入,想赚更多钱,只有去做副业
- 一组数字1-n,随机取走3个,求被取走的数【腾讯前端面试题】
- android studio for android learning (十) android之activity的启动和关闭
- 【Gym-101775 J】Straight Master【差分、贪心】
- Matlab图像处理系列2———空间域平滑滤波器
- 边缘计算是什么 优点
- android 绘制分割线,Android 布局中分割线创建的三种方式
- 计算机指法标准,标准盲打指法练习
- 利用Python解决利率相关计算问题(利率计算器):本金翻倍,定期取款,多重利率,通货膨胀等问题
- 一个很不错的C++类的练习题目
- android传屏器怎么获取热点,手机做热点怎么投屏 为你介绍投屏的方法
热门文章
- 扫描发送找不到计算机,win7系统找不到扫描仪怎么办 win7系统找不到扫描仪解决方法...
- column-count瀑布流实现左右顺序
- JAVA算法练习(5):错误票据
- ssh: connect to host gitlab.rails.cn port 22: Connection timed outfatal: Could not read from remote
- dyld: Library not loaded:
- 深度学习中的数学公式(二:线性代数、概率论、数理统计相关公式)
- 2020 ICPC 昆明站 I(Mr. Main and Windmills)
- 全运会开幕-天翼云全力打造“智慧赛事”
- NOJ 1145.求图像的周长
- 北京面授python培训机构