golang Cookie

//Cookie的原理:

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

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

package main

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

var gCurCookies []*http.Cookie
var gCurCookieJar *cookiejar.Jar

func initAll() {
	gCurCookies = nil
	//var err error;
	gCurCookieJar, _ = cookiejar.New(nil)

}

//get url response html
func getUrlRespHtml(url string) string {
	fmt.Printf("getUrlRespHtml, url=%s", url)

	var respHtml string = ""

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

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

		fmt.Printf("http get url=%s response error=%s\n", url, err.Error())
	}
	fmt.Printf("httpResp.Header=%s", httpResp.Header)
	fmt.Printf("httpResp.Status=%s", httpResp.Status)

	defer httpResp.Body.Close()

	body, errReadAll := ioutil.ReadAll(httpResp.Body)
	if errReadAll != nil {
		fmt.Printf("get response for url=%s got error=%s\n", url, errReadAll.Error())
	}
        //全局保存
	gCurCookies = gCurCookieJar.Cookies(httpReq.URL)

	respHtml = string(body)

	return respHtml
}

func dbgPrintCurCookies() {
	var cookieNum int = len(gCurCookies)
	fmt.Printf("cookieNum=%d", cookieNum)
	for i := 0; i < cookieNum; i++ {
		var curCk *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)
	}
}

func main() {
	initAll()

	fmt.Printf("====== step 1:get Cookie ======")
	var baiduMainUrl string = "http://www.baidu.com/"
	fmt.Printf("baiduMainUrl=%s", baiduMainUrl)
	getUrlRespHtml(baiduMainUrl)
	dbgPrintCurCookies()

	fmt.Printf("\n====== step 2:use the Cookie ======")

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

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

时间: 2024-10-11 22:52:43

golang Cookie的相关文章

Go语言(golang)开源项目大全

转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析器控制台用户界面加密数据处理数据结构数据库和存储开发工具分布式/网格计算文档编辑器Encodings and Character SetsGamesGISGo ImplementationsGraphics and AudioGUIs and Widget ToolkitsHardwareLangu

Golang网络库中socket阻塞调度源码剖析

本文分析了Golang的socket文件描述符和goroutine阻塞调度的原理.代码中大部分是Go代码,小部分是汇编代码.完整理解本文需要Go语言知识,并且用Golang写过网络程序.更重要的是,需要提前理解goroutine的调度原理. 1. TCP的连接对象: 连接对象: 在net.go中有一个名为Conn的接口,提供了对于连接的读写和其他操作: type Conn interface { Read(b []byte) (n int, err error) Write(b []byte)

Golang 微框架 Gin 简介

框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个. 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫.golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架.既然构造框架的门槛变低了,

golang http 学习

断断续续学习golang 已经有大半年了. 几次涉猎过golang net package, 去年也用过Beego,但是总觉得自己只知皮毛,不能精通.所以,这次誓将其一举拿下.达到知道其宏观组织结构,又了解实现细节,甚至设计时各种考虑以及折中. 目标树立好了,后面的就靠实践了.学习也要有计划,有条理.规划一个好的学习顺序和学习策略,可以节节高升,事半功倍. 那下面就简单规划一下学习路径.本着先易后难,既注重实用,又兼顾细节的原则,规划如下. 1. learn http package struc

[转]Go语言(golang)开源项目大全

内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑器 Encodings and Character Sets Games GIS Go Implementations Graphics and Audio GUIs and Widget Toolkits Hardware Language and Linguistics 日志 机器学习 Math

Golang知乎xx API:收藏回答

搬砖的陈大师版权所有,转载请注明:http://www.lenggirl.com/spider/zhihu.html 项目地址:https://github.com/hunterhug/zhihuxx 项目:知乎xx API 已实现功能: 通过单个问题id获取批量答案 通过集合id获取批量问题后获取批量答案 关注别人(风险大容易被封杀去除,xxxx) 登录(验证码问题去除,xxxx),待人工破解验证码 通过答案id获取单个回答 (鸡肋,弃用) 待实现功能: 根据用户唯一域名id获取她(它)他的全

golang的http请求

import ( "fmt" "io/ioutil" "net/http" "net/url" "strings" ) func httpGet() { resp, err := http.Get("http://www.baidu.com") if err != nil { // handle error } defer resp.Body.Close() body, err := i

golang angular5 nginx web程序部署说明

1.nginx nginx-1.13.8.zip http://nginx.org/en/download.html unzip to E:\web-server-for-win E:\web-server-for-win\nginx-1.13.8\conf nginx配置修改 nginx.conf 红色字体为新添加配置 ######## start ######## #user  nobody; worker_processes  1; #error_log  logs/error.log;

Go实战--golang中使用JWT(JSON Web Token)

http://blog.csdn.net/wangshubo1989/article/details/74529333 之前写过关于golang中如何使用cookie的博客: 实战–go中使用cookie 今天就来跟大家简单介绍一下golang中如何使用token,当然是要依赖一下github上的优秀的开源库了. 首先,要搞明白一个问题,token.cookie.session的区别. token.cookie.session的区别 Cookie Cookie总是保存在客户端中,按在客户端中的存