golang Cookie

前端之家收集整理的这篇文章主要介绍了golang Cookie前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

//Cookie的原理:

Cookie是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递。用户每次访问站点时,Web应用程序都可以读取Cookie包含的信息。Cookie的基本工作原理如果用户再次访问站点上的页面,当该用户输入URLwww.*****.com时,浏览器就会在本地硬盘上查找与该URL相关联的Cookie。如果该Cookie存在,浏览器就将它与页面请求一起发送到您的站点。主要是用于维护HTTP的状态的作用。


下面测试一下golang的Cookie的库,第一次请求从response获取cookie,然后第二次请求加在resquest信息中

packagemain

import(
	"fmt"
	"io/IoUtil"
	"net/http"
	"net/http/cookiejar"
)

vargCurCookies[]*http.Cookie
vargCurCookieJar*cookiejar.Jar

funcinitAll(){
	gCurCookies=nil
	//varerrerror;
	gCurCookieJar,_=cookiejar.New(nil)

}

//geturlresponsehtml
funcgetUrlRespHtml(urlstring)string{
	fmt.Printf("getUrlRespHtml,url=%s",url)

	varrespHtmlstring=""

	httpClient:=&http.Client{
		CheckRedirect:nil,Jar:gCurCookieJar,}

	httpReq,err:=http.NewRequest("GET",url,nil)
	httpResp,err:=httpClient.Do(httpReq)

		fmt.Printf("httpgeturl=%sresponseerror=%s\n",err.Error())
	}
	fmt.Printf("httpResp.Header=%s",httpResp.Header)
	fmt.Printf("httpResp.Status=%s",httpResp.Status)

	deferhttpResp.Body.Close()

	body,errReadAll:=IoUtil.ReadAll(httpResp.Body)
	iferrReadAll!=nil{
		fmt.Printf("getresponseforurl=%sgoterror=%s\n",errReadAll.Error())
	}
//全局保存
	gCurCookies=gCurCookieJar.Cookies(httpReq.URL)

	respHtml=string(body)

	returnrespHtml
}

funcdbgPrintCurCookies(){
	varcookieNumint=len(gCurCookies)
	fmt.Printf("cookieNum=%d",cookieNum)
	fori:=0;i<cookieNum;i++{
		varcurCk*http.Cookie=gCurCookies[i]
		fmt.Printf("\n------Cookie[%d]------",i)
		fmt.Printf("\tName=%s",curCk.Name)
		fmt.Printf("\tValue=%s",curCk.Value)
		fmt.Printf("\tPath=%s",curCk.Path)
		fmt.Printf("\tDomain=%s",curCk.Domain)
		fmt.Printf("\tExpires=%s",curCk.Expires)
		fmt.Printf("\tRawExpires=%s",curCk.RawExpires)
		fmt.Printf("\tMaxAge=%d",curCk.MaxAge)
		fmt.Printf("\tSecure=%t",curCk.Secure)
		fmt.Printf("\tHttpOnly=%t",curCk.HttpOnly)
		fmt.Printf("\tRaw=%s",curCk.Raw)
		fmt.Printf("\tUnparsed=%s",curCk.Unparsed)
	}
}

funcmain(){
	initAll()

	fmt.Printf("======step1:getCookie======")
	varbaiduMainUrlstring="http://www.baidu.com/"
	fmt.Printf("baiduMainUrl=%s",baiduMainUrl)
	getUrlRespHtml(baiduMainUrl)
	dbgPrintCurCookies()

	fmt.Printf("\n======step2:usetheCookie======")

	vargetapiUrlstring="https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true"
	getUrlRespHtml(getapiUrl)
	dbgPrintCurCookies()
}

//golang的Cookie使用挺简单的,通过Cookie可以维护登录状态

猜你在找的Go相关文章