首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取格式错误的http状态代码,防止读取响应体?

如何获取格式错误的http状态代码,防止读取响应体?
EN

Stack Overflow用户
提问于 2018-07-13 09:21:33
回答 1查看 0关注 0票数 0

我试图向外部服务器发送一个简单的GET请求:

代码语言:txt
复制
response ,err := http.Get(baseUrl + timeAsString)

服务器应该以某种格式返回字符串。

我能够通过Postman或Chrome执行GET请求,但是当我通过代码尝试它时,会得到一个错误:

代码语言:txt
复制
net/http: HTTP/1.x transport connection broken: malformed HTTP status code "1:01:17"

服务器似乎将状态代码放错了位置,这使我无法获得响应的主体。

是否有一种简单的方法仍然能够看到响应(目前为零)?

我试图避免TCP连接。

EN

回答 1

Stack Overflow用户

发布于 2018-07-13 19:12:55

如果服务器没有发送格式良好的状态行,那么它就不会发送响应正文。如果要查看HTTP客户端读取的数据,请在HTTP客户端和底层网络连接之间楔入hex.Dumper

代码语言:javascript
复制
type loggingConn struct {
    net.Conn
    d io.WriteCloser
}

func (c *loggingConn) Read(p []byte) (int, error) {
    n, err := c.Conn.Read(p)
    if n > 0 {
        c.d.Write(p[:n])
    }
    if err != nil {
        c.d.Close()
    }
    return n, err
}

...

// Create client with transport that wraps a loggingConn
// around the network connection. 
client := http.Client{Transport: &http.Transport{DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
    d := net.Dialer{}
    c, err := d.DialContext(ctx, network, addr)
    if err != nil {
        return nil, err
    }
    return &loggingConn{c, hex.Dumper(os.Stdout)}, nil
}}}

// Use the client to issue the HTTP request.
response ,err := client.Get(baseUrl + timeAsString)

这将使用客户端使用的格式将客户端读取的数据写入stdout hexdump -C

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档