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)

先谢过。

5 回复

你好 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)的方法。

回到顶部