学习Go语言有段时间了,想要拿go来做点东西,首先想到的就是把《极客时间》买的专栏下载下来,这样方便自已搜索并且统一管理。 有了想法之后就开始动手实战,遇到的第一个问题就是怎么模拟用户的登录。<!--more-->有好几种方法可以做到,比如在代码中调用登录的接口,或者调用API的时候带着Cookie。这两种方法都需要我们在代码中配置用户名密码或者Cookie之类的,比较麻烦。 如果用户已经在浏览器中登录了,能不能直接拿着浏览器中的Cookie去登录呢?调研了一翻发现可行。以下是代码,供大家参考。 ```golang package main import ( "fmt" "io/ioutil" "net/http" "strings" "github.com/onyas/go-browsercookie" ) func main() { var cookieJar, _ = browsercookie.Chrome("https://account.geekbang.org") var client = &http.Client{Jar: cookieJar} request, _ := http.NewRequest("POST", "https://time.geekbang.org/serv/v1/my/columns", strings.NewReader("{}")) request.Header.Set("Origin", "https://time.geekbang.org") request.Header.Set("Referer", "https://time.geekbang.org") request.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36") request.Header.Set("X-Real-IP", "211.161.244.200") request.Header.Set("Connection", "keep-alive") request.Header.Set("Content-Type", "application/json") request.Header.Add("Content-Length", "2") res, _ := client.Do(request) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(string(body)) } ``` 首先要保证在Chrome里面登录极客时间,然后执行go run main.go, 会要求输入电脑的密码,用于取cookie用。然后就输出你已购买的课程。这里主要用到了一个go-browsercookie工具类,大家可以到github上面查看具体的用法[go-browsercookie](https://github.com/onyas/go-browsercookie)