2012-04-14 67 views
0

我嘗試一個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

回答

2

這似乎工作:

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的增加被遺忘的錯誤處理。