main.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "bytes"
  4. "flag"
  5. "io"
  6. "net/http"
  7. "sync"
  8. quic "github.com/lucas-clemente/quic-go"
  9. "github.com/lucas-clemente/quic-go/h2quic"
  10. "github.com/lucas-clemente/quic-go/internal/protocol"
  11. "github.com/lucas-clemente/quic-go/internal/utils"
  12. )
  13. func main() {
  14. verbose := flag.Bool("v", false, "verbose")
  15. tls := flag.Bool("tls", false, "activate support for IETF QUIC (work in progress)")
  16. flag.Parse()
  17. urls := flag.Args()
  18. logger := utils.DefaultLogger
  19. if *verbose {
  20. logger.SetLogLevel(utils.LogLevelDebug)
  21. } else {
  22. logger.SetLogLevel(utils.LogLevelInfo)
  23. }
  24. logger.SetLogTimeFormat("")
  25. versions := protocol.SupportedVersions
  26. if *tls {
  27. versions = append([]protocol.VersionNumber{protocol.VersionTLS}, versions...)
  28. }
  29. roundTripper := &h2quic.RoundTripper{
  30. QuicConfig: &quic.Config{Versions: versions},
  31. }
  32. defer roundTripper.Close()
  33. hclient := &http.Client{
  34. Transport: roundTripper,
  35. }
  36. var wg sync.WaitGroup
  37. wg.Add(len(urls))
  38. for _, addr := range urls {
  39. logger.Infof("GET %s", addr)
  40. go func(addr string) {
  41. rsp, err := hclient.Get(addr)
  42. if err != nil {
  43. panic(err)
  44. }
  45. logger.Infof("Got response for %s: %#v", addr, rsp)
  46. body := &bytes.Buffer{}
  47. _, err = io.Copy(body, rsp.Body)
  48. if err != nil {
  49. panic(err)
  50. }
  51. logger.Infof("Request Body:")
  52. logger.Infof("%s", body.Bytes())
  53. wg.Done()
  54. }(addr)
  55. }
  56. wg.Wait()
  57. }