From cddd704d9142df29202686c133c077e2fb66d496 Mon Sep 17 00:00:00 2001 From: duanhf2012 Date: Thu, 2 Jan 2020 14:01:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=87=8D=E5=AE=9A=E4=BB=A5?= =?UTF-8?q?=E5=8F=8Acookie=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/SubNet1_Service1.go | 15 +++++++-- sysservice/originhttp/httpserverervice.go | 41 +++++++++++++++++++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/Test/SubNet1_Service1.go b/Test/SubNet1_Service1.go index 28ac645..f1e082b 100644 --- a/Test/SubNet1_Service1.go +++ b/Test/SubNet1_Service1.go @@ -6,6 +6,8 @@ import ( "github.com/duanhf2012/origin/originnode" "github.com/duanhf2012/origin/service" "github.com/duanhf2012/origin/sysservice/originhttp" + "net/http" + ) type InputData struct { @@ -24,7 +26,7 @@ func init() { //OnInit ... func (ws *SubNet1_Service1) OnInit() error { originhttp.Post("", ws.HTTP_UserIntegralInfo) - originhttp.Post(" /aaa/bbb", ws.Test) + originhttp.Get("/aaa/bbb", ws.HTTP_Test) originhttp.Get("/Login/bbb", ws.HTTP_UserIntegralInfo) originhttp.SetStaticResource(originhttp.METHOD_GET, "/file/", "d:\\") @@ -44,12 +46,21 @@ func (slf *SubNet1_Service1) RPC_Add(arg *InputData, ret *int) error { return nil } -func (slf *SubNet1_Service1) Test(request *originhttp.HttpRequest, resp *originhttp.HttpRespone) error { + + +func (slf *SubNet1_Service1) HTTP_Test(request *originhttp.HttpRequest, resp *originhttp.HttpRespone) error { + var cookieList []*http.Cookie + cookieList = append(cookieList,&http.Cookie{Name: "X-Xsrftoken",Value: "df41ba54db5011e89861002324e63af81", HttpOnly: true,Domain:"urquant.net"}) + resp.Redirect("https://www.urquant.net?sdaf=1",cookieList) + //redirects(&resp.Resp, &request.Req) return nil } func (slf *SubNet1_Service1) HTTP_UserIntegralInfo(request *originhttp.HttpRequest, resp *originhttp.HttpRespone) error { ret, ok := request.Query("a") fmt.Print(ret, ok) + return nil } + + diff --git a/sysservice/originhttp/httpserverervice.go b/sysservice/originhttp/httpserverervice.go index f2e6cf2..f0e4406 100644 --- a/sysservice/originhttp/httpserverervice.go +++ b/sysservice/originhttp/httpserverervice.go @@ -21,16 +21,28 @@ import ( "github.com/duanhf2012/origin/service" ) +type HttpRedirectData struct { + Url string + //Cookies map[string]string + + CookieList []*http.Cookie +} + type HttpRequest struct { Header http.Header Body string ParamStr string mapParam map[string]string + //Req http.Request + } + type HttpRespone struct { Respone []byte + RedirectData HttpRedirectData + //Resp http.ResponseWriter } type ServeHTTPRouterMux struct { @@ -218,7 +230,7 @@ func (slf *ServeHTTPRouterMux) ServeHTTP(w http.ResponseWriter, r *http.Request) request := HttpRequest{r.Header, string(msg), r.URL.RawQuery, nil} var resp HttpRespone - + //resp.Resp = w timeFuncStart := time.Now() err = cluster.InstanceClusterMgr().Call(strCallPath, &request, &resp) @@ -229,7 +241,12 @@ func (slf *ServeHTTPRouterMux) ServeHTTP(w http.ResponseWriter, r *http.Request) if err != nil { writeRespone(w, http.StatusBadRequest, fmt.Sprint(err)) } else { - writeRespone(w, http.StatusOK, string(resp.Respone)) + if resp.RedirectData.Url != ""{ + resp.redirects(&w,r) + }else { + writeRespone(w, http.StatusOK, string(resp.Respone)) + } + } } @@ -439,3 +456,23 @@ func (slf *HttpRespone) WriteRespones(Code int32, Msg string, Data interface{}) } slf.Respone = []byte(StrRet) } + +func (slf *HttpRespone) Redirect(url string,cookieList []*http.Cookie) { + slf.RedirectData.Url = url + slf.RedirectData.CookieList = cookieList +} + + + + +func (slf *HttpRespone) redirects(w *http.ResponseWriter, req *http.Request) { + if slf.RedirectData.CookieList != nil { + for _,v := range slf.RedirectData.CookieList{ + req.AddCookie(v) + } + } + + http.Redirect(*w, req, slf.RedirectData.Url, + // see @andreiavrammsd comment: often 307 > 301 + http.StatusTemporaryRedirect) +}