如何与http.Client建立长连接?
问题描述:
我尝试一个HTTP服务器连接,只要连接,如下图所示:如何与http.Client建立长连接?
func main() {
request, err := http.NewRequest("GET", "http://long.connection.org:8080/", nil)
request.SetBasicAuth("xxx", "oooo")
http_client := &http.Client{}
response, _ := http_client.Do(request)
var buf []byte
for {
_, err := response.Body.Read(buf)
if err == io.EOF { break }
fmt.Printf("%s", string(buf))
}
}
但从response.Body总是空读取。似乎我无法使用response.Body将数据发送到服务器。
任何人都可以提供帮助吗?
答
这似乎工作:
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "http://www.example.com/", nil)
if err != nil {
log.Fatal(err)
}
http_client := &http.Client{}
response, err := http_client.Do(request)
if err != nil {
log.Fatal(err)
}
buf := make([]byte, 4096) // any non zero value will do, try '1'.
for {
n, err := response.Body.Read(buf)
if n == 0 && err != nil { // simplified
break
}
fmt.Printf("%s", buf[:n]) // no need to convert to string here
}
fmt.Println()
}
编辑:NewRequest的增加被遗忘的错误处理。
第一件事:检查错误。你为什么不看看http.NewRequest和http_client.Do返回的错误? – 2012-04-14 09:33:19