如何与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将数据发送到服务器。

任何人都可以提供帮助吗?

+2

第一件事:检查错误。你为什么不看看http.NewRequest和http_client.Do返回的错误? – 2012-04-14 09:33:19

这似乎工作:

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的增加被遗忘的错误处理。