Skip to content

Instantly share code, notes, and snippets.

@yankooo
Created June 7, 2020 09:08
Show Gist options
  • Save yankooo/3248295053b8648bfc821792653c6c1f to your computer and use it in GitHub Desktop.
Save yankooo/3248295053b8648bfc821792653c6c1f to your computer and use it in GitHub Desktop.
golang http2 example
package main
import (
"crypto/tls"
"crypto/x509"
"golang.org/x/net/http2"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{
Transport: transport2(),
}
res, err := client.Get("https://localhost:8080/profile?name=elephant")
if err != nil {
log.Fatal(err)
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
res.Body.Close()
log.Printf("Code: %d, Body: %s", res.StatusCode, body)
}
func transport2() *http2.Transport {
return &http2.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
DisableCompression: true,
AllowHTTP: false,
}
}
func tlsConfig() *tls.Config {
crt, err := ioutil.ReadFile("./public.crt")
if err != nil {
log.Fatal(err)
}
rootCAs := x509.NewCertPool()
rootCAs.AppendCertsFromPEM(crt)
return &tls.Config{
RootCAs: rootCAs,
InsecureSkipVerify: false,
ServerName: "localhost",
}
}
package main
import (
"encoding/json"
"log"
"net"
"net/http"
"time"
)
type Account struct {
Name string `json:"name"`
Proto string `json:"proto"`
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/profile", func(responseWriter http.ResponseWriter, request *http.Request) {
account := &Account{
Name: request.URL.Query().Get("name"),
Proto: request.Proto,
}
bs, _ := json.Marshal(account)
responseWriter.WriteHeader(http.StatusOK)
responseWriter.Write(bs)
})
server := &http.Server{
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
}
var (
listener net.Listener
err error
)
if listener, err = net.Listen("tcp", ":8080"); err != nil {
log.Fatalf("listen port: %+v", err)
}
if err := server.ServeTLS(listener, "./public.crt", "./private.key"); err != nil {
log.Fatalf("server run fail: %+v", err)
}
}
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFeDCCA2ACCQCG/4bELPQNZjANBgkqhkiG9w0BAQsFADB+MRIwEAYDVQQIDAln
dWFuZ2RvbmcxETAPBgNVBAcMCHNoZW56aGVuMQ8wDQYDVQQKDAZzaG9wZWUxDDAK
BgNVBAsMA2lzYzESMBAGA1UEAwwJbG9jYWxob3N0MSIwIAYJKoZIhvcNAQkBFhNt
aWNoYWVsQG1pY2hhZWwuY29tMB4XDTIwMDYwNTEwMTAzOFoXDTI1MDYwNDEwMTAz
OFowfjESMBAGA1UECAwJZ3Vhbmdkb25nMREwDwYDVQQHDAhzaGVuemhlbjEPMA0G
A1UECgwGc2hvcGVlMQwwCgYDVQQLDANpc2MxEjAQBgNVBAMMCWxvY2FsaG9zdDEi
MCAGCSqGSIb3DQEJARYTbWljaGFlbEBtaWNoYWVsLmNvbTCCAiIwDQYJKoZIhvcN
AQEBBQADggIPADCCAgoCggIBAM0a8FA8dDG4NVyuNQG7aIco7XFplNH+mV4LnIs+
A6Je6n4UQjE6tn0Gz7TDXucTEA5fYf8nD+Snd/3SNC6FLLRLLq0xoA33kNVxr5ZG
ZxBif1DPDh1+eiysWsl8GWJz6XFQi48J9ZxTSl3IvvwztRYhAIdDozdg3xRbtDR6
QhabpowPseoq/IP1SMXg27eLp+O1rz5YPP48nfvgmO04xY81JJSWw9oMlRgCKIlq
QHHzGGMvj9jEUT4sUIVd9wSxdjHMIpiOE3bLjobJlKqwbQACwg9fExZiVulZFSfT
P/3P1yxmfeRi/NKqyOWikvz0niufYZgOtqyQa+8Jfh5LTsjWuOCexYXzuSZ+vwVE
dZJz8tp1rjvwdCorVpmbQc9zeBw1l4bZO43yXVZlh+/HH8juAuhUB8EZxjDSnmrn
p8oK5qCQCn96loucjL8vqjHkUW2J7D2nRGqZ7rWTuvuTJf5rDmeNHugyy5BxKGUV
T1kc1741e2Od+ahDB2206mqcGGUGtNTDleX2Z9qdQr5f6X9rXDbg7VD0swGsa57S
ytHllHebeja6SkK26cyJRkgZt9gnufVYtHu/J909qM8lM+llXUY2gYNvxa2XRoNk
WKuJyIvRjEhzmhiEMIZaJaX4ER9L9kKM1ZayHFsbhJHroe6eDZKeNsQN9ZM00cKz
t+OJAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIgJY3PO61a30/9TAc4iopSuohlL
uQcria4jj088ej6OBOY0A4Q+fXcJUfWZk/fjSJ+xSoF1apHa748ZOJ4ZrUMo4rre
64OFmPOMn9ggVmcJCupaUldgG/pAfMrfXpA7Zv69Zw3epirGwW8FOdptfxm52cJu
61wF2IbkCDFHDf3E2K6rqcqCzxKGGtk8PvXxtS5Pi1iHogQ3920VPpgHBTwiLC4D
xpKmW8lK7gLfCmqOWLqA0c2KMvH3EMYsw4TZ0FUxduLJnfD09UQZ7YMDH799LAJF
m+AM5qo2vucNLJxiSHaW4YPFGrdvwbiAErBNcnXq4RBpXJojXL7zI8R2S28bGij3
A8fTdQNDZlH2UdFGhvZI7y82Nfbx9Js8u0EePZ3U54DBRqJCqVgxCinOcvnFGHuu
g8bH3c2jP8Xfxwn28eMWyqir/HzUdJ0Oin0xmaMMf73GVLwBtZiVX0Cm5etfhXZy
0Y8YK+5iI9O2uYgiJF/q1HImGsZ4gaED1x00ggO+V2oPNRblZBIbUqJhy9+lSoTm
7D1RWQMAKU/x5E5jPfc4De4Is3PC1GxC+7HM8amB4gKLn0zT1ABZAXqFDPsYgdfT
eznwuaqQ7mY9ewKXrJ7qJw+mJqaKgHF/uMpEcafqOHz179GfKblPCDy/Z2KGVqMT
vjRYovVkURCGXx9d
-----END CERTIFICATE-----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment