net/http 返回状态码是非 200 获取响应体疑问

2020-06-17 16:20:57 +08:00
 ropon

net/http 包请求一个 URL 地址,返回状态码是非 200,比如 400,如何获取响应体的内容呢?

测试结果:

{
    "errcode": 4023,
    "errmsg": "认证失败"
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>

net/http 包是否状态码 200 才读响应体的内容呢?

1320 次点击
所在节点    Go 编程语言
5 条回复
CEBBCAT
2020-06-17 16:40:27 +08:00
net/http 只有在 err 不为 nil 时才不可以读取 resp.Body,底下那个就是 server 返回的消息体。

你可以使用 netcat 监听本地一个端口,对比 postman 或 rewuests 的请求与 net/http 的请求有什么差异。

上面那个是 JSON,底下那个看着像是 HTTP 服务器默认的错误页面。所以你确认 postman 和 go 代码测试的是同一个服务器吗? postman 那个也是 400 错误吗?

你需要补一点 HTTP 特别是 TCP 基础,这样你就明白无论什么 postman 还是 requests 都可以通过 telnet 来替代。

以及你八成还要学学《提问的智慧》,若是可以,还可以搜搜 coolshell 的『 XY 问题』
Vegetable
2020-06-17 16:42:32 +08:00
不对的,你两个请求返回内容不一样。
后边的 html 就是 body,显然不是你说的 json,应该是请求的部分错了。
CEBBCAT
2020-06-17 16:53:27 +08:00
看起来像是个前辈……奇怪……
ropon
2020-06-17 17:13:09 +08:00
应该是程序问题( https://github.com/Ropon/newpanel ),新写一个 demo 又是对的。
D:\Seafile\Go\src\test>gor
{"errcode": 4025, "errmsg": "this is test"}
ropon
2020-06-18 14:36:28 +08:00
找到问题了,是这行引起的
# api = Api(site_bp, default_mediatype="application/json;charset=utf-8")
api = Api(site_bp)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/682398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX