普通网友 2012-04-14 09:22
浏览 221

如何与http.Client建立长连接?

I try to connect a http server as long connection, like below:

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))
    }
}

But read from response.Body always empty. And seems I can't use response.Body to send data to server.

Any one can help?

  • 写回答

1条回答 默认 最新

  • douyo770657 2012-04-14 10:24
    关注

    This seems to work:

    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()
    }
    

    Edit: Added forgotten error handling of NewRequest.

    评论

报告相同问题?

悬赏问题

  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害