紫色飞猪的研发之旅--05go封装http请求
2021-09-03 15:27
1231 查看
package middleware import ( "go/pkg/errno" "go/pkg/getcookie" "crypto/tls" "fmt" "io/ioutil" "net" "net/http" "strings" "errors" "time" ) // request.Header.Set 与request.Header.Add 区别:https://www.cnblogs.com/Dong-Ge/articles/11269898.html type HTTPClient interface { Do(req *http.Request) (*http.Response, error) } var ( Client HTTPClient ) func init() { Client = &http.Client{ Timeout: 3 * time.Second, //忽略https证书 Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 1 * time.Second, KeepAlive: 30 * time.Second, // HTTp keeplive DualStack: true, }).DialContext, MaxIdleConns: 100, MaxIdleConnsPerHost: 8, IdleConnTimeout: 120 * time.Second, }, } } // CheckRespStatus 状态检查 func CheckRespStatus(resp *http.Response) ([]byte, error) { bodyBytes, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode >= 200 && resp.StatusCode < 400 { return bodyBytes, nil } return bodyBytes, errno.New(errno.InternalServerError, errors.New(string(bodyBytes))) } // GetRequest 建立Get请求 func GetRequest(url string, headerSet map[string]string) (respStatusCode int, respBytes []byte, err error) { // 提交请求 request, err := http.NewRequest("GET", url, nil) if err != nil { err = errno.New(errno.InternalServerError, err) return } // 添加token // request.Header.Set("Authorization", "Bearer " + token) // 添加cookie cookieName, cookieValue := getcookie.GetCookie() cookie := &http.Cookie{Name: cookieName, Value: cookieValue, HttpOnly: true} request.AddCookie(cookie) // header 添加字段 if headerSet != nil { for k, v := range headerSet { // request.Header.Set 与request.Header.Add 区别:https://www.cnblogs.com/Dong-Ge/articles/11269898.html request.Header.Set(k, v) } } // 处理返回结果 resp, err := Client.Do(request) if err != nil { err = errno.New(errno.InternalServerError, err) return 0, nil, err } defer resp.Body.Close() // 返回的状态码 respBytes, err = CheckRespStatus(resp) respStatusCode = resp.StatusCode return } // PostRequest 建立Post请求 func PostRequest(url, body string, headerSet map[string]string) (respStatusCode int, respBytes []byte, err error) { request, err := http.NewRequest("POST", url, strings.NewReader(body)) if err != nil { err = errno.New(errno.InternalServerError, err) return } cookieName, cookieValue := getcookie.GetCookie() // 拿到cookie cookie := &http.Cookie{Name: cookieName, Value: cookieValue, HttpOnly: true} request.AddCookie(cookie) // header 添加字段 if headerSet != nil { for k, v := range headerSet { // request.Header.Set 与request.Header.Add 区别:https://www.cnblogs.com/Dong-Ge/articles/11269898.html request.Header.Set(k, v) } } resp, err := Client.Do(request) if err != nil { err = errno.New(errno.InternalServerError, err) return 0, nil, err } defer resp.Body.Close() // 返回的状态码 respBytes, err = CheckRespStatus(resp) respStatusCode = resp.StatusCode return } // PutRequest 建立Put请求 func PutRequest(url, body string, headerSet map[string]string) (respStatusCode int, respBytes []byte, err error) { request, err := http.NewRequest("PUT", url, strings.NewReader(body)); if err != nil { err = errno.New(errno.InternalServerError, err) return } cookieName, cookieValue := getcookie.GetCookie() // 拿到cookie cookie := &http.Cookie{Name: cookieName, Value: cookieValue, HttpOnly: true} request.AddCookie(cookie) // header 添加字段 if headerSet != nil { for k, v := range headerSet { request.Header.Set(k, v) } } resp, err := Client.Do(request) if err != nil { fmt.Println(err.Error()) err = errno.New(errno.InternalServerError, err) return 0, nil, err } defer resp.Body.Close() //返回的状态码 respBytes, err = CheckRespStatus(resp) respStatusCode = resp.StatusCode return } // PatchRequest 建立Patch请求 func PatchRequest(url, body string, headerSet map[string]string) (respStatusCode int, respBytes []byte, err error) { request, err := http.NewRequest("PATCH", url, strings.NewReader(body)) if err != nil { err = errno.New(errno.InternalServerError, err) return } cookieName, cookieValue := getcookie.GetCookie() // 拿到cookie cookie := &http.Cookie{Name: cookieName, Value: cookieValue, HttpOnly: true} request.AddCookie(cookie) // header 添加字段 if headerSet != nil { for k, v := range headerSet { request.Header.Set(k, v) } } resp, err := Client.Do(request) if err != nil { err = errno.New(errno.InternalServerError, err) return 0, nil, err } defer resp.Body.Close() //返回的状态码 respBytes, err = CheckRespStatus(resp) respStatusCode = resp.StatusCode return } // DeleteRequest 建立Delete请求 func DeleteRequest(url, body string, headerSet map[string]string) (respStatusCode int, respBytes []byte, err error) { request, err := http.NewRequest("DELETE", url, strings.NewReader(body)) if err != nil { err = errno.New(errno.InternalServerError, err) return } cookiename, cookievalue := getcookie.GetCookie() // 拿到cookie cookie := &http.Cookie{Name: cookiename, Value: cookievalue, HttpOnly: true} request.AddCookie(cookie) // header 添加字段 if headerSet != nil { for k, v := range headerSet { // request.Header.Set 与request.Header.Add 区别:https://www.cnblogs.com/Dong-Ge/articles/11269898.html request.Header.Set(k, v) } } resp, err := Client.Do(request) if err != nil { err = errno.New(errno.InternalServerError, err) return 0, nil, err } defer resp.Body.Close() //返回的状态码 respBytes, err = CheckRespStatus(resp) respStatusCode = resp.StatusCode return }
- 注:上述五类http请求实质还可以写到一个函数中,这里为了调用清晰特地按类分开。
相关文章推荐
- ios开发如何封装AFN第三方类库中的http请求
- 【No9.】完美封装Http请求 Get、Post
- js面向对象编程指南学习笔记--闭包封装HTTP请求
- Android 封装http请求的工具类
- 记 Vue +axios 使用和http请求封装
- Android入门:封装一个HTTP请求的辅助类
- Android入门:封装一个HTTP请求的辅助类
- 基于HttpClient的Get/Post的http请求简单封装
- 优雅地封装使用rxjava2+retrofit2发送http请求
- [从零开始系列]AndroidApp研发之路(一) 网络请求的封装(一)
- Android入门:封装一个HTTP请求的辅助类
- Android封装Http请求
- Android 封装http请求的工具类
- Android 网络编程——HTTP请求的封装
- android项目后期优化-----代码重新封装/形成框架意识(http请求)
- php实现的http请求封装示例
- Android入门:封装一个HTTP请求的辅助类
- Android入门:封装一个HTTP请求的辅助类
- Android封装Http请求
- Volley封装,一行代码搞定http请求(重点介绍cookie、https、自定义requst请求)