我试图向外部服务器发送一个简单的GET请求:
response ,err := http.Get(baseUrl + timeAsString)
服务器应该以某种格式返回字符串。
我能够通过Postman或Chrome执行GET请求,但是当我通过代码尝试它时,会得到一个错误:
net/http: HTTP/1.x transport connection broken: malformed HTTP status code "1:01:17"
服务器似乎将状态代码放错了位置,这使我无法获得响应的主体。
是否有一种简单的方法仍然能够看到响应(目前为零)?
我试图避免TCP连接。
发布于 2018-07-13 19:12:55
如果服务器没有发送格式良好的状态行,那么它就不会发送响应正文。如果要查看HTTP客户端读取的数据,请在HTTP客户端和底层网络连接之间楔入hex.Dumper。
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
。
https://stackoverflow.com/questions/-100005578
复制相似问题