1 Star 0 Fork 0

曾广宇/mxx-core-v2

Create your Gitee Account
Explore and code with more than 14 million developers,Free private repositories !:)
Sign up
文件
Clone or Download
http.go 2.85 KB
Copy Edit Raw Blame History
曾广宇 authored 2024-09-11 17:56 +08:00 . 修正 http 请求
package mhttp
import (
"crypto/tls"
"io"
"net"
"net/http"
"net/url"
"time"
)
var DefaultClient = &http.Client{
Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
MaxIdleConns: 500, // 最大连接数,默认0无穷大
MaxIdleConnsPerHost: 500, // 对每个host的最大连接数量(MaxIdleConnsPerHost<=MaxIdleConns)
IdleConnTimeout: 30 * time.Second, // 多长时间未使用自动关闭连接
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
},
Timeout: 10 * time.Second,
}
var DefaultHttpHandlerInstance = DefaultHttpHandler{}
type HttpHandler interface {
Run(request Request, body io.Reader) (*Response, error)
}
type DefaultHttpHandler struct {
}
func (me DefaultHttpHandler) Run(ce Request, body io.Reader) (*Response, error) {
rowUrl := ce.Url
if ce.Params != nil {
if d, err := URL(ce.Url, ce.Params); err != nil {
return nil, err
} else {
rowUrl = d
}
}
if request, err := http.NewRequest(ce.Method, rowUrl, body); err == nil {
request.Header = ce.Head
if response, err := DefaultClient.Do(request); err == nil {
result := &Response{
Method: ce.Method,
Url: ce.Url,
Header: response.Header,
Status: response.Status,
StatusCode: response.StatusCode,
OK: response.StatusCode == 200,
ContentLength: response.ContentLength,
Metadata: response,
reader: false,
}
response.Cookies()
return result, err
} else {
return nil, err
}
} else {
return nil, err
}
}
func Head(url string) (*Response, error) {
if response, err := DefaultClient.Head(url); err == nil {
result := &Response{
Method: "GET",
Url: url,
Header: response.Header,
Status: response.Status,
StatusCode: response.StatusCode,
Metadata: response,
}
return result, err
} else {
return nil, err
}
}
func NewRequest(method, url string) *Request {
return &Request{Method: method, Url: url, Head: make(http.Header), Charset: "utf-8", Handler: DefaultHttpHandlerInstance}
}
func NewRequest2(method, url, headerName, headerValue string) *Request {
request := NewRequest(method, url)
request.AddHeader(headerName, headerValue)
return request
}
func NewRequest3(method, url string, header map[string]string) *Request {
request := NewRequest(method, url)
request.AddHeaderMap(header)
return request
}
func URL(rawURL string, params map[string]string) (string, error) {
if u, err := url.Parse(rawURL); err == nil {
if params == nil {
return rawURL, nil
}
values := u.Query()
for k, v := range params {
values.Add(k, v)
}
return u.String() + "?" + values.Encode(), nil
} else {
return "", err
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dennis-mxx/mxx-core-v2.git
git@gitee.com:dennis-mxx/mxx-core-v2.git
dennis-mxx
mxx-core-v2
mxx-core-v2
v0.4.74

Search