Golang中响应错误码应为400但实际返回200状态码的问题
Golang中响应错误码应为400但实际返回200状态码的问题 我是Golang新手,
当我调用一个API时,我得到以下代码的响应。但在Postman中无法获取头部值和状态码。如何获取所有值,即头部信息和状态码。
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
bodynew, _ := ioutil.ReadAll(resp.Body)
fmt.Fprintf(w, "%s", bodynew)
先谢过。
你好 AnikHasibul, r.StatusCode, r.StatusCode 需要写两次吗?
更多关于Golang中响应错误码应为400但实际返回200状态码的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不。我误操作了 😞
r.StatusCode 只返回状态码,即 200、404、403
fmt.Println(r.StatusCode, r.StatusCode, r.Header.Get())
希望您能理解这个思路!
当我调用API时,使用以下代码可以获得响应。但在Postman中无法获取到头部值和状态码。如何获取所有值,包括头部信息和状态码?
或许你可以通过检查 http.DefaultClient.Do() 可能返回的错误来改进代码。
例如:
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatalf("Failed to get API resource: %s", err)
} else if resp.StatusCode >= 400 {
log.Fatalf("API errored. Code: %d", resp.StatusCode)
}
defer resp.Body.Close()
这样你就能更清楚地知道错误原因:是获取API响应失败,还是成功联系到在线资源但返回了错误代码。
希望这对你有帮助。
在你的代码中,问题可能在于你只读取了响应体,而没有检查响应的状态码和头部信息。当服务器返回错误状态码(如400)时,你的代码仍然会输出响应体内容,但不会处理状态码。此外,在Postman中无法获取头部值和状态码,可能是因为你的代码没有正确打印或返回这些信息。
以下是一个修改后的示例,展示如何获取完整的响应信息,包括状态码、头部和响应体。我添加了错误处理,以确保在HTTP请求失败时能捕获错误,并打印出状态码和头部信息。
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 示例:创建一个HTTP请求(假设req已正确初始化,例如使用http.NewRequest)
req, err := http.NewRequest("GET", "https://example.com/api", nil)
if err != nil {
fmt.Printf("Error creating request: %v\n", err)
return
}
// 发送请求
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("Error making request: %v\n", err)
return
}
defer resp.Body.Close()
// 读取响应体
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("Error reading response body: %v\n", err)
return
}
// 打印状态码
fmt.Printf("Status Code: %d\n", resp.StatusCode)
// 打印头部信息
fmt.Println("Headers:")
for key, values := range resp.Header {
for _, value := range values {
fmt.Printf("%s: %s\n", key, value)
}
}
// 打印响应体
fmt.Printf("Response Body: %s\n", string(body))
}
在这个示例中:
- 使用
resp.StatusCode获取HTTP状态码(例如,400表示客户端错误)。 - 使用
resp.Header遍历所有头部键值对。 - 使用
ioutil.ReadAll读取响应体,并转换为字符串输出。 - 添加了基本的错误处理,以避免在请求或读取过程中出现panic。
如果你的API应该返回400但实际返回200,请检查服务器端代码是否正确设置了状态码。在客户端,通过上述代码,你可以验证实际接收到的状态码。如果问题依然存在,请确保服务器在处理错误时调用了类似w.WriteHeader(http.StatusBadRequest)的方法。

