From 1399a710da840cc6d1e9a54be53eb358aa463a4b Mon Sep 17 00:00:00 2001 From: John Date: Thu, 7 Jun 2018 09:30:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4ghttp=E5=8C=85=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E4=BB=A3=E7=A0=81=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0ghttp.Client=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89Header=E6=96=B9=E6=B3=95=EF=BC=8Cghttp.Cookie=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0Map=E6=96=B9=E6=B3=95=E7=94=A8=E4=BA=8E=E8=8E=B7?= =?UTF-8?q?=E5=BE=97=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=8F=90=E4=BA=A4=E7=9A=84?= =?UTF-8?q?=E6=89=80=E6=9C=89cookie=E5=80=BC=EF=BC=8C=E6=9E=84=E9=80=A0?= =?UTF-8?q?=E6=88=90map=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/ghttp_client_request.go | 26 ++++++++++++++++--- g/net/ghttp/ghttp_server_cookie.go | 11 ++++++++ geg/net/ghttp/client/cookie/client.go | 17 ++++++++++++ geg/net/ghttp/client/cookie/server.go | 15 +++++++++++ .../{http_client.go => ghttp/client/get.go} | 0 geg/net/ghttp/{ => server}/cookie.go | 0 geg/net/ghttp/{ => server}/domain.go | 0 geg/net/ghttp/{ => server}/events.go | 0 geg/net/ghttp/{ => server}/hello.go | 0 geg/net/ghttp/{ => server}/https/https.go | 0 .../ghttp/{ => server}/https/https_http.go | 0 geg/net/ghttp/{ => server}/https/server.crt | 0 geg/net/ghttp/{ => server}/https/server.key | 0 .../{ => server}/https/server.key.public | 0 geg/net/ghttp/{ => server}/log.go | 0 .../performance/beego/beegoRule.go | 0 .../performance/beego/beegoStatic.go | 0 .../ghttp/{ => server}/performance/client.go | 0 .../{ => server}/performance/gf/gfRule.go | 0 .../{ => server}/performance/gf/gfStatic.go | 0 .../{ => server}/performance/gin/ginRule.go | 0 .../{ => server}/performance/gin/ginStatic.go | 0 geg/net/ghttp/{ => server}/ports.go | 0 geg/net/ghttp/{ => server}/pprof.go | 0 geg/net/ghttp/{ => server}/reload/admin.go | 0 geg/net/ghttp/{ => server}/reload/https.go | 0 .../ghttp/{ => server}/reload/https_http.go | 0 .../ghttp/{ => server}/reload/multi_port.go | 0 .../reload/multi_port_and_server.go | 0 geg/net/ghttp/{ => server}/reload/simple.go | 0 geg/net/ghttp/{ => server}/router.go | 0 geg/net/ghttp/{ => server}/server1.go | 0 geg/net/ghttp/{ => server}/server2.go | 0 geg/net/ghttp/{ => server}/session.go | 0 geg/net/ghttp/{ => server}/status.go | 0 geg/net/ghttp/{ => server}/status_map.go | 0 geg/net/ghttp/{ => server}/status_redirect.go | 0 geg/net/ghttp/{ => server}/upload_client.go | 0 geg/net/ghttp/{ => server}/upload_server.go | 0 .../{ => server}/websocket/echo/index.html | 0 .../ghttp/{ => server}/websocket/echo/main.go | 0 41 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 geg/net/ghttp/client/cookie/client.go create mode 100644 geg/net/ghttp/client/cookie/server.go rename geg/net/{http_client.go => ghttp/client/get.go} (100%) rename geg/net/ghttp/{ => server}/cookie.go (100%) rename geg/net/ghttp/{ => server}/domain.go (100%) rename geg/net/ghttp/{ => server}/events.go (100%) rename geg/net/ghttp/{ => server}/hello.go (100%) rename geg/net/ghttp/{ => server}/https/https.go (100%) rename geg/net/ghttp/{ => server}/https/https_http.go (100%) rename geg/net/ghttp/{ => server}/https/server.crt (100%) rename geg/net/ghttp/{ => server}/https/server.key (100%) rename geg/net/ghttp/{ => server}/https/server.key.public (100%) rename geg/net/ghttp/{ => server}/log.go (100%) rename geg/net/ghttp/{ => server}/performance/beego/beegoRule.go (100%) rename geg/net/ghttp/{ => server}/performance/beego/beegoStatic.go (100%) rename geg/net/ghttp/{ => server}/performance/client.go (100%) rename geg/net/ghttp/{ => server}/performance/gf/gfRule.go (100%) rename geg/net/ghttp/{ => server}/performance/gf/gfStatic.go (100%) rename geg/net/ghttp/{ => server}/performance/gin/ginRule.go (100%) rename geg/net/ghttp/{ => server}/performance/gin/ginStatic.go (100%) rename geg/net/ghttp/{ => server}/ports.go (100%) rename geg/net/ghttp/{ => server}/pprof.go (100%) rename geg/net/ghttp/{ => server}/reload/admin.go (100%) rename geg/net/ghttp/{ => server}/reload/https.go (100%) rename geg/net/ghttp/{ => server}/reload/https_http.go (100%) rename geg/net/ghttp/{ => server}/reload/multi_port.go (100%) rename geg/net/ghttp/{ => server}/reload/multi_port_and_server.go (100%) rename geg/net/ghttp/{ => server}/reload/simple.go (100%) rename geg/net/ghttp/{ => server}/router.go (100%) rename geg/net/ghttp/{ => server}/server1.go (100%) rename geg/net/ghttp/{ => server}/server2.go (100%) rename geg/net/ghttp/{ => server}/session.go (100%) rename geg/net/ghttp/{ => server}/status.go (100%) rename geg/net/ghttp/{ => server}/status_map.go (100%) rename geg/net/ghttp/{ => server}/status_redirect.go (100%) rename geg/net/ghttp/{ => server}/upload_client.go (100%) rename geg/net/ghttp/{ => server}/upload_server.go (100%) rename geg/net/ghttp/{ => server}/websocket/echo/index.html (100%) rename geg/net/ghttp/{ => server}/websocket/echo/main.go (100%) diff --git a/g/net/ghttp/ghttp_client_request.go b/g/net/ghttp/ghttp_client_request.go index 049ade5e5..aa7bf73e7 100644 --- a/g/net/ghttp/ghttp_client_request.go +++ b/g/net/ghttp/ghttp_client_request.go @@ -19,7 +19,8 @@ import ( // http客户端 type Client struct { - http.Client + http.Client // 底层http client对象 + header map[string]string // header } // http客户端对象指针 @@ -30,9 +31,15 @@ func NewClient() (*Client) { DisableKeepAlives: true, }, }, + make(map[string]string), } } +// 设置HTTP Headerss +func (c *Client) SetHeader(key, value string) { + c.header[key] = value +} + // 设置请求过期时间 func (c *Client) SetTimeOut(t time.Duration) { c.Timeout = t @@ -52,8 +59,7 @@ func (c *Client) Put(url, data string) (*ClientResponse, error) { // 支持文件上传,需要字段格式为:FieldName=@file: func (c *Client) Post(url, data string) (*ClientResponse, error) { var req *http.Request - hasfile := strings.Contains(data, "@file:") - if hasfile { + if strings.Contains(data, "@file:") { buffer := new(bytes.Buffer) writer := multipart.NewWriter(buffer) for _, item := range strings.Split(data, "&") { @@ -90,6 +96,12 @@ func (c *Client) Post(url, data string) (*ClientResponse, error) { req.Header.Set("Content-Type", "application/x-www-form-urlencoded") } } + // 自定义header + if len(c.header) > 0 { + for k, v := range c.header { + req.Header.Set(k, v) + } + } // 执行请求 resp, err := c.Do(req) if err != nil { @@ -134,7 +146,13 @@ func (c *Client) DoRequest(method, url string, data []byte) (*ClientResponse, er if err != nil { return nil, err } - + // 自定义header + if len(c.header) > 0 { + for k, v := range c.header { + req.Header.Set(k, v) + } + } + // 执行请求 resp, err := c.Do(req) if err != nil { return nil, err diff --git a/g/net/ghttp/ghttp_server_cookie.go b/g/net/ghttp/ghttp_server_cookie.go index 5aac7820c..363d57779 100644 --- a/g/net/ghttp/ghttp_server_cookie.go +++ b/g/net/ghttp/ghttp_server_cookie.go @@ -64,6 +64,17 @@ func (c *Cookie) init() { c.mu.Unlock() } +// 获取所有的Cookie并构造成map返回 +func (c *Cookie) Map() map[string]string { + m := make(map[string]string) + c.mu.RLock() + defer c.mu.RUnlock() + for k, v := range c.data { + m[k] = v.value + } + return m +} + // 获取SessionId func (c *Cookie) SessionId() string { v := c.Get(c.server.GetSessionIdName()) diff --git a/geg/net/ghttp/client/cookie/client.go b/geg/net/ghttp/client/cookie/client.go new file mode 100644 index 000000000..b83b598c2 --- /dev/null +++ b/geg/net/ghttp/client/cookie/client.go @@ -0,0 +1,17 @@ +package main + +import ( + "fmt" + "gitee.com/johng/gf/g/os/glog" + "gitee.com/johng/gf/g/net/ghttp" +) + +func main() { + c := ghttp.NewClient() + c.SetHeader("Cookie", "name=john; score=100") + if r, e := c.Get("http://127.0.0.1:8199/"); e != nil { + glog.Error(e) + } else { + fmt.Println(string(r.ReadAll())) + } +} diff --git a/geg/net/ghttp/client/cookie/server.go b/geg/net/ghttp/client/cookie/server.go new file mode 100644 index 000000000..40cccfe16 --- /dev/null +++ b/geg/net/ghttp/client/cookie/server.go @@ -0,0 +1,15 @@ +package main + +import ( + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/net/ghttp" +) + +func main() { + s := g.Server() + s.BindHandler("/", func(r *ghttp.Request){ + r.Response.Writeln(r.Cookie.Map()) + }) + s.SetPort(8199) + s.Run() +} \ No newline at end of file diff --git a/geg/net/http_client.go b/geg/net/ghttp/client/get.go similarity index 100% rename from geg/net/http_client.go rename to geg/net/ghttp/client/get.go diff --git a/geg/net/ghttp/cookie.go b/geg/net/ghttp/server/cookie.go similarity index 100% rename from geg/net/ghttp/cookie.go rename to geg/net/ghttp/server/cookie.go diff --git a/geg/net/ghttp/domain.go b/geg/net/ghttp/server/domain.go similarity index 100% rename from geg/net/ghttp/domain.go rename to geg/net/ghttp/server/domain.go diff --git a/geg/net/ghttp/events.go b/geg/net/ghttp/server/events.go similarity index 100% rename from geg/net/ghttp/events.go rename to geg/net/ghttp/server/events.go diff --git a/geg/net/ghttp/hello.go b/geg/net/ghttp/server/hello.go similarity index 100% rename from geg/net/ghttp/hello.go rename to geg/net/ghttp/server/hello.go diff --git a/geg/net/ghttp/https/https.go b/geg/net/ghttp/server/https/https.go similarity index 100% rename from geg/net/ghttp/https/https.go rename to geg/net/ghttp/server/https/https.go diff --git a/geg/net/ghttp/https/https_http.go b/geg/net/ghttp/server/https/https_http.go similarity index 100% rename from geg/net/ghttp/https/https_http.go rename to geg/net/ghttp/server/https/https_http.go diff --git a/geg/net/ghttp/https/server.crt b/geg/net/ghttp/server/https/server.crt similarity index 100% rename from geg/net/ghttp/https/server.crt rename to geg/net/ghttp/server/https/server.crt diff --git a/geg/net/ghttp/https/server.key b/geg/net/ghttp/server/https/server.key similarity index 100% rename from geg/net/ghttp/https/server.key rename to geg/net/ghttp/server/https/server.key diff --git a/geg/net/ghttp/https/server.key.public b/geg/net/ghttp/server/https/server.key.public similarity index 100% rename from geg/net/ghttp/https/server.key.public rename to geg/net/ghttp/server/https/server.key.public diff --git a/geg/net/ghttp/log.go b/geg/net/ghttp/server/log.go similarity index 100% rename from geg/net/ghttp/log.go rename to geg/net/ghttp/server/log.go diff --git a/geg/net/ghttp/performance/beego/beegoRule.go b/geg/net/ghttp/server/performance/beego/beegoRule.go similarity index 100% rename from geg/net/ghttp/performance/beego/beegoRule.go rename to geg/net/ghttp/server/performance/beego/beegoRule.go diff --git a/geg/net/ghttp/performance/beego/beegoStatic.go b/geg/net/ghttp/server/performance/beego/beegoStatic.go similarity index 100% rename from geg/net/ghttp/performance/beego/beegoStatic.go rename to geg/net/ghttp/server/performance/beego/beegoStatic.go diff --git a/geg/net/ghttp/performance/client.go b/geg/net/ghttp/server/performance/client.go similarity index 100% rename from geg/net/ghttp/performance/client.go rename to geg/net/ghttp/server/performance/client.go diff --git a/geg/net/ghttp/performance/gf/gfRule.go b/geg/net/ghttp/server/performance/gf/gfRule.go similarity index 100% rename from geg/net/ghttp/performance/gf/gfRule.go rename to geg/net/ghttp/server/performance/gf/gfRule.go diff --git a/geg/net/ghttp/performance/gf/gfStatic.go b/geg/net/ghttp/server/performance/gf/gfStatic.go similarity index 100% rename from geg/net/ghttp/performance/gf/gfStatic.go rename to geg/net/ghttp/server/performance/gf/gfStatic.go diff --git a/geg/net/ghttp/performance/gin/ginRule.go b/geg/net/ghttp/server/performance/gin/ginRule.go similarity index 100% rename from geg/net/ghttp/performance/gin/ginRule.go rename to geg/net/ghttp/server/performance/gin/ginRule.go diff --git a/geg/net/ghttp/performance/gin/ginStatic.go b/geg/net/ghttp/server/performance/gin/ginStatic.go similarity index 100% rename from geg/net/ghttp/performance/gin/ginStatic.go rename to geg/net/ghttp/server/performance/gin/ginStatic.go diff --git a/geg/net/ghttp/ports.go b/geg/net/ghttp/server/ports.go similarity index 100% rename from geg/net/ghttp/ports.go rename to geg/net/ghttp/server/ports.go diff --git a/geg/net/ghttp/pprof.go b/geg/net/ghttp/server/pprof.go similarity index 100% rename from geg/net/ghttp/pprof.go rename to geg/net/ghttp/server/pprof.go diff --git a/geg/net/ghttp/reload/admin.go b/geg/net/ghttp/server/reload/admin.go similarity index 100% rename from geg/net/ghttp/reload/admin.go rename to geg/net/ghttp/server/reload/admin.go diff --git a/geg/net/ghttp/reload/https.go b/geg/net/ghttp/server/reload/https.go similarity index 100% rename from geg/net/ghttp/reload/https.go rename to geg/net/ghttp/server/reload/https.go diff --git a/geg/net/ghttp/reload/https_http.go b/geg/net/ghttp/server/reload/https_http.go similarity index 100% rename from geg/net/ghttp/reload/https_http.go rename to geg/net/ghttp/server/reload/https_http.go diff --git a/geg/net/ghttp/reload/multi_port.go b/geg/net/ghttp/server/reload/multi_port.go similarity index 100% rename from geg/net/ghttp/reload/multi_port.go rename to geg/net/ghttp/server/reload/multi_port.go diff --git a/geg/net/ghttp/reload/multi_port_and_server.go b/geg/net/ghttp/server/reload/multi_port_and_server.go similarity index 100% rename from geg/net/ghttp/reload/multi_port_and_server.go rename to geg/net/ghttp/server/reload/multi_port_and_server.go diff --git a/geg/net/ghttp/reload/simple.go b/geg/net/ghttp/server/reload/simple.go similarity index 100% rename from geg/net/ghttp/reload/simple.go rename to geg/net/ghttp/server/reload/simple.go diff --git a/geg/net/ghttp/router.go b/geg/net/ghttp/server/router.go similarity index 100% rename from geg/net/ghttp/router.go rename to geg/net/ghttp/server/router.go diff --git a/geg/net/ghttp/server1.go b/geg/net/ghttp/server/server1.go similarity index 100% rename from geg/net/ghttp/server1.go rename to geg/net/ghttp/server/server1.go diff --git a/geg/net/ghttp/server2.go b/geg/net/ghttp/server/server2.go similarity index 100% rename from geg/net/ghttp/server2.go rename to geg/net/ghttp/server/server2.go diff --git a/geg/net/ghttp/session.go b/geg/net/ghttp/server/session.go similarity index 100% rename from geg/net/ghttp/session.go rename to geg/net/ghttp/server/session.go diff --git a/geg/net/ghttp/status.go b/geg/net/ghttp/server/status.go similarity index 100% rename from geg/net/ghttp/status.go rename to geg/net/ghttp/server/status.go diff --git a/geg/net/ghttp/status_map.go b/geg/net/ghttp/server/status_map.go similarity index 100% rename from geg/net/ghttp/status_map.go rename to geg/net/ghttp/server/status_map.go diff --git a/geg/net/ghttp/status_redirect.go b/geg/net/ghttp/server/status_redirect.go similarity index 100% rename from geg/net/ghttp/status_redirect.go rename to geg/net/ghttp/server/status_redirect.go diff --git a/geg/net/ghttp/upload_client.go b/geg/net/ghttp/server/upload_client.go similarity index 100% rename from geg/net/ghttp/upload_client.go rename to geg/net/ghttp/server/upload_client.go diff --git a/geg/net/ghttp/upload_server.go b/geg/net/ghttp/server/upload_server.go similarity index 100% rename from geg/net/ghttp/upload_server.go rename to geg/net/ghttp/server/upload_server.go diff --git a/geg/net/ghttp/websocket/echo/index.html b/geg/net/ghttp/server/websocket/echo/index.html similarity index 100% rename from geg/net/ghttp/websocket/echo/index.html rename to geg/net/ghttp/server/websocket/echo/index.html diff --git a/geg/net/ghttp/websocket/echo/main.go b/geg/net/ghttp/server/websocket/echo/main.go similarity index 100% rename from geg/net/ghttp/websocket/echo/main.go rename to geg/net/ghttp/server/websocket/echo/main.go