下面的程序通过建立TCP连接来实现初步的HTTP协议,通过向网络主机发送HTTP HEAD请求,来读取网络主机返回的信息。
e.g.
package main import ( "bytes" "fmt" "io" "net" "os" ) func main() { if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s host:port\n", os.Args[0]) os.Exit(1) } service := os.Args[1] conn, err := net.Dial("tcp", service) checkError(err) _, err = conn.Write([]byte("HEAD / HTTP/1.1\r\n\r\n")) checkError(err) result, err := readFully(conn) checkError(err) fmt.Println(string(result)) os.Exit(0) } func readFully(conn net.Conn) ([]byte, error) { defer conn.Close() result := bytes.NewBuffer(nil) buffer := make([]byte, 1024) for { n, err := conn.Read(buffer) if err != nil { if err == io.EOF { fmt.Fprintln(os.Stdout, err.Error()) break } return nil, err } result.Write(buffer[0:n]) } return result.Bytes(), nil } func checkError(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s\n", err.Error()) os.Exit(1) } }运行: