Golang模拟用户登录

onyas · · 4788 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

学习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)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4788 次点击  
加入收藏 微博
2 回复  |  直到 2019-08-10 16:37:26
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传