客户端代码:
package main
import (
"bytes"
"crypto/tls"
"fmt"
"github.com/quic-go/quic-go"
"github.com/quic-go/quic-go/http3"
"k8s.io/klog/v2"
"net/http"
)
func main() {
cert, err := tls.LoadX509KeyPair("auth/server.crt", "auth/server.key")
if err != nil {
klog.Infof("load tls err: %v", err)
return
}
roundTripper := &http3.RoundTripper{
TLSClientConfig: &tls.Config{Certificates: []tls.Certificate{cert},
InsecureSkipVerify: true}, // set a TLS client config, if desired
QUICConfig: &quic.Config{}, // QUIC connection options
}
defer roundTripper.Close()
client := &http.Client{
Transport: roundTripper,
}
payload := bytes.NewBufferString(`{"key": "val"}`)
resp, err := client.Post("https://10.11.140.68:9000/hello", "application/json", payload)
fmt.Printf("%#v, %#v", resp, err)
}
服务端代码:
func main() {
container := InitRESTServer()
server := http3.Server{
Handler: container,
Addr: "10.11.140.68:9000",
QUICConfig: &quic.Config{
Tracer: qlog.DefaultConnectionTracer,
},
}
fmt.Println(server.ListenAndServeTLS("auth/server.crt", "auth/server.key"))
}
func InitRESTServer() *restful.Container {
serverContainer := restful.NewContainer()
ws := new(restful.WebService)
ws.Path("/").
Consumes(restful.MIME_JSON).
Produces(restful.MIME_JSON)
ws.Route(ws.POST("/hello").To(HandleHello))
// ws.Route(ws.POST("/keepalive/remote").To(RemoteKeepAlive))
return serverContainer.Add(ws)
}
func HandleHello(req *restful.Request, resp *restful.Response) {
klog.Infof("request is: %#v", req)
resp.WriteErrorString(http.StatusTeapot, fmt.Sprintf("This is teapot speaking~"))
}