/knock

带有更多网络设置的http库,基于rawhttp

Primary LanguageGo

Knock

  • 即使TCP连接失败也可以获取LocalAddr与RemoteAddr
  • 重定向可以拿到过程中的所有LocalAddr
  • 可以指定网络接口(Net Interface)
  • 支持中间件,可以在写入TCP连接前进行操作
k := NewClient()
	req := &BaseRequest{
		method:  GET,
		uri:     "",
		headers: nil,
		body:    nil,
	}
	s, err := k.Knock("192.168.1.14", 81, false, req,
		options.SetProxyOpt("http://127.0.0.1:8080", 1*time.Second),
		options.SetMiddlewareOpt("HelloWorld", NewBaseMiddleware(func(opts rawhttp.Options, req *client.Request, conn rawhttp.Conn) {
			fmt.Println(req.Method, req.Headers, opts.FastDialerOpts.Dialer.LocalAddr)
		})),
	)
	if err != nil {
		fmt.Println("fatal:", err)
		return
	}
	fmt.Println(fmt.Sprintf("Connection: %s->%s by %s", s.LocalAddr(), s.RemoteAddr(), s.NetInterface().Name))
	resp, err := s.Response()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(resp.String())