加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang Cookie

发布时间:2020-12-16 18:37:48 所属栏目:大数据 来源:网络整理
导读://Cookie的原理: Cookie是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递。用户每次访问站点时,Web应用程序都可以读取Cookie包含的信息。Cookie的基本工作原理如果用户再次访问站点上的页面,当该用户输入URLwww.*****.com时,浏览器就

//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=%sn",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=%sn",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可以维护登录状态

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读