Search code examples
httpgohttp2

golang proper http2 request


I want to make an http/2 request in go and got to a few issues there. How to make proper http/2 requests in go?

Error: Get "https://webhook.site/aae1e0ab-3e48-49c8-8cd0-526e12ee4077": http2: unexpected ALPN protocol ""; want "h2" (Why? Other sites are working)

Code:

t := &http2.Transport{}
    c := &http.Client{
        Transport: t,
    }


        r, err := http.NewRequest("GET", "https://webhook.site/aae1e0ab-3e48-49c8-8cd0-526e12ee4077", nil)
        if err != nil {
            fmt.Println(err)
        }
        r.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.2 Safari/605.1.15")
        r.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")

        resp, err := c.Do(r)
        if err != nil {
            fmt.Println(err)
        }
        defer resp.Body.Close()

        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(string(body))
    ```

Solution

  • As was mentioned, that server doesn't support HTTP2:

    PS C:\> curl.exe -I --http2-prior-knowledge https://webhook.site
    curl: (16) Error in the HTTP2 framing layer
    

    Contrast with one that does:

    PS C:\> curl.exe -I --http2-prior-knowledge https://example.com
    HTTP/2 200
    

    https://curl.se/docs/manpage.html#--http2-prior-knowledge