NJUPTjz 2018-08-27 07:31 采纳率: 0%
浏览 733
已结题

x/net/http2.0包的使用

有谁用过go语言中的x/net/http2.0包,这里面的关于frame的操作,我不太会使用这个API
中的一些函数,谁可以提供一些例子吗?谢谢!
  • 写回答

1条回答 默认 最新

  • oyljerry 2018-08-27 10:38
    关注
     package main
    
    import (
        "bytes"
        "crypto/tls"
        "io"
        "io/ioutil"
        "log"
        "net"
        "net/http"
        "os"
    
        "golang.org/x/net/http2"
    )
    
    func main() {
        buf := &bytes.Buffer{}
        transport := &http2.Transport{DialTLS: dialT(buf)}
        client := &http.Client{Transport: transport}
    
        res, err := client.Get("https://http2-push.appspot.com/")
        if err != nil {
                log.Fatal(err)
        }
    
        res.Body.Close()
        res.Write(os.Stdout)
    
        framer := http2.NewFramer(ioutil.Discard, buf)
        for {
                f, err := framer.ReadFrame()
                if err == io.EOF || err == io.ErrUnexpectedEOF {
                        break
                }
                switch err.(type) {
                case nil:
                        log.Println(f)
                case http2.ConnectionError:
                        // Ignore. There will be many errors of type "PROTOCOL_ERROR, DATA
                        // frame with stream ID 0". Presumably we are abusing the framer.
                default:
                        log.Println(err, framer.ErrorDetail())
                }
        }
    }
    
    // dialT returns a connection that writes everything that is read to w.
    func dialT(w io.Writer) func(network, addr string, cfg *tls.Config) (net.Conn, error) {
        return func(network, addr string, cfg *tls.Config) (net.Conn, error) {
                conn, err := tls.Dial(network, addr, cfg)
                return &tConn{conn, w}, err
        }
    }
    
    type tConn struct {
        net.Conn
        T io.Writer // receives everything that is read from Conn
    }
    
    func (w *tConn) Read(b []byte) (n int, err error) {
        n, err = w.Conn.Read(b)
        w.T.Write(b)
        return
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名