func (c *HTTPClient) NewRequest(service *common.URL, method string, args interface{}) *Request {
	return &Request{
		ID:       atomic.AddInt64(&c.ID, 1),
		group:    service.GetParam(constant.GROUP_KEY, ""),
		protocol: service.Protocol,
		version:  service.GetParam(constant.VERSION_KEY, ""),
		service:  service.Path,
		method:   method,
		args:     args,
	}
}
NewRequest creates a new HTTP request with @service ,@method and @arguments.
package jsonrpc
import (
	"bufio"
	"bytes"
	"context"
	"fmt"
	"io/ioutil"
	"net"
	"net/http"
	"net/url"
	"os"
	"strings"
	"sync/atomic"
	"time"
)
import (
	"github.com/opentracing/opentracing-go"
	perrors "github.com/pkg/errors"
)
import (
	"dubbo.apache.org/dubbo-go/v3/common"
	"dubbo.apache.org/dubbo-go/v3/common/constant"
	"dubbo.apache.org/dubbo-go/v3/common/logger"
)
type Request struct {
	ID       int64
	group    string
	protocol string
	version  string
	service  string
	method   string
	args     interface{}
}
type HTTPOptions struct {
	HandshakeTimeout time.Duration
	HTTPTimeout      time.Duration
}
var defaultHTTPOptions = HTTPOptions{
	HandshakeTimeout: 3 * time.Second,
	HTTPTimeout:      3 * time.Second,
}
type HTTPClient struct {
	ID      int64
	options HTTPOptions
}
func NewHTTPClient(opt *HTTPOptions) *HTTPClient {
	if opt == nil {
		opt = &defaultHTTPOptions
	}
	switch {
	case opt.HandshakeTimeout == 0:
		opt.HandshakeTimeout = defaultHTTPOptions.HandshakeTimeout
	case opt.HTTPTimeout == 0:
		opt.HTTPTimeout = defaultHTTPOptions.HTTPTimeout
	}
	t := time.Now()
	return &HTTPClient{
		ID:      int64(uint32(os.Getpid() * t.Second() * t.Nanosecond())),
		options: *opt,
	}
}