接手了别人的项目,在测试的过程中发现通过server端往agent端传数据时出现错误,提示
`invalid character '<' looking for beginning of value `
通过查看代码
`res, err := http.NewRequest("POST", url, body) `
res的内容为
`&{POST http://10.x.x.x/api/v1/xxx/ HTTP/1.1 1 1 map[] {0xc000c23230} 0x70f050 252 [] false 10.234.234.74 map[] map[] < nil > map[] < nil > < nil > < nil > < nil >}`
而`resp, err = http.DefaultClient.Do(res)`后
resp的内容为
`&{404 Not Found 404 HTTP/1.1 1 1 map[Connection:[keep-alive] Content-Length:[3650] Content-Type:[text/html] Date:[Tue, 14 May 2019 03:09:32 GMT] Etag:["54480a74-e42"] Server:[nginx/1.6.2]] 0xc000180bc0 3650 [] false false map[] 0xc000b59100 < nil >}`
可以看到错误应该是数据里的`< nil >`
但是实在不知道如何排查和问题定位,求各位帮忙。
`invalid character '<' looking for beginning of value`这个会不会是单双引号产生的问题?
404未找到,看看nginx配置,使用了`body = bytes.NewReader`自然就变成`byte`了,有啥问题吗?
强烈建议使用markdown,太难看了<a href="/user/lions_zy2324" title="@lions_zy2324">@lions_zy2324</a>
#2
更多评论
用 `body = bytes.NewReader` 后,数据的格式变成了
&{[123 34 100 97 116 97 34 58 91 123 34 97 99 116 105 111 110 34 58 34 97 100 100 69 110 116 114 121 34 44 34 101 110 116 114 121 34 58 34 49 48 46 50 51 57 46 54 51 46 50 51 57 34 44 34 115 101 116 110 97 109 101 34 58 34 115 121 11 34 107 101 121 4 108 99 88 86 108 99 51 82 114 90 88 107 61 34 125] 0 -1}
#1
`var jdata = make(map[string]interface{})`
`jdata["data"] = idatas`
`jsonData, err := json.Marshal(jdata)`
`res, err := HttpRequestPost(uri, jsonData)`
数据定义和json转换代码如上
#3