Skip to content

Instantly share code, notes, and snippets.

@vanleantking
Forked from border/gocookies.go
Created November 3, 2018 08:56
Show Gist options
  • Save vanleantking/02a23349d5f6da5bd8994c008b5f89a2 to your computer and use it in GitHub Desktop.
Save vanleantking/02a23349d5f6da5bd8994c008b5f89a2 to your computer and use it in GitHub Desktop.
go cookiejar demo
package main
import (
"io/ioutil"
"log"
"net/http"
"net/http/cookiejar"
)
var gCurCookies []*http.Cookie
var gCurCookieJar *cookiejar.Jar
//do init before all others
func initAll() {
gCurCookies = nil
//var err error;
gCurCookieJar, _ = cookiejar.New(nil)
}
//get url response html
func getUrlRespHtml(url string) string {
log.Printf("getUrlRespHtml, url=%s", url)
var respHtml string = ""
httpClient := &http.Client{
CheckRedirect: nil,
Jar: gCurCookieJar,
}
// httpResp, err := httpClient.Get("http://example.com")
httpReq, err := http.NewRequest("GET", url, nil)
//httpReq.Header.Add("If-None-Match", `W/"wyzzy"`)
httpResp, err := httpClient.Do(httpReq)
//httpResp, err := http.Get(url)
//log.Printf("http.Get done")
if err != nil {
log.Printf("http get url=%s response error=%s\n", url, err.Error())
}
log.Printf("httpResp.Header=%s", httpResp.Header)
log.Printf("httpResp.Status=%s", httpResp.Status)
defer httpResp.Body.Close()
body, errReadAll := ioutil.ReadAll(httpResp.Body)
if errReadAll != nil {
log.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)
log.Printf("cookieNum=%d", cookieNum)
for i := 0; i < cookieNum; i++ {
var curCk *http.Cookie = gCurCookies[i]
//log.Printf("curCk.Raw=%s", curCk.Raw)
log.Printf("Cookie [%d]", i)
log.Printf("Name\t=%s", curCk.Name)
log.Printf("Value\t=%s", curCk.Value)
log.Printf("Path\t=%s", curCk.Path)
log.Printf("Domain\t=%s", curCk.Domain)
log.Printf("Expires\t=%s", curCk.Expires)
log.Printf("RawExpires=%s", curCk.RawExpires)
log.Printf("MaxAge\t=%d", curCk.MaxAge)
log.Printf("Secure\t=%t", curCk.Secure)
log.Printf("HttpOnly=%t", curCk.HttpOnly)
log.Printf("Raw\t=%s", curCk.Raw)
log.Printf("Unparsed=%s", curCk.Unparsed)
}
}
func main() {
initAll()
//step1: access baidu url to get cookie BAIDUID
log.Printf("======BAIDUID Cookie ======")
var baiduMainUrl string = "http://www.baidu.com/"
log.Printf("baiduMainUrl=%s", baiduMainUrl)
respHtml := getUrlRespHtml(baiduMainUrl)
log.Printf("respHtml=%s", respHtml)
dbgPrintCurCookies()
//check cookie
//step2: login, pass paras, extract resp cookie
log.Printf("======login_token ======")
//https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true
var getapiUrl string = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true"
var getApiRespHtml string = getUrlRespHtml(getapiUrl)
log.Printf("getApiRespHtml=%s", getApiRespHtml)
dbgPrintCurCookies()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment