Go发送HTTP请求来登录校园网 | 青训营笔记

128 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

前提

在第一节课中老师教授了如何发送HTTP请求来获取在线词典后端发送来的数据,涉及到了很多知识点,我就想瞎折腾几下,看看能不能通过这样的请求登录浙工大的移动校园网。

抓包

和老师教的步骤一致,我们先打开移动WiFi校园网的登录页面。

Snipaste_2022-06-06_22-00-11.jpg

打开F12开发者面板后我们输入对应的账号密码,然后点击登录,发现我们刚刚发送的登录请求已经被chrome录制了下来。

Snipaste_2022-06-06_22-01-34.jpg

然后我们就把这个curl给拷贝一下,注意这个拷贝的格式,如果格式错误我们是无法通过老师提供的工具网站来自动生成Go代码的。

Snipaste_2022-06-06_22-02-32.jpg

代码生成

此时我们打开工具网站,将刚刚复制所得的粘贴进去,就得到了我们需要的代码。

Snipaste_2022-06-06_22-10-48.jpg

此时我们可以稍微停一下,来分析一下这里自动生成的代码都有什么。

Snipaste_2022-06-06_22-14-02.jpg

首先是新建一个http client,然后将一段带有我账号信息的body和"POST"方法、URL封装到一个HTTP请求下。

接着就是设置一些参数到请求的header里,设置完成后会调用client.Do(req)来发送请求。此时我们需要处理一下请求发送失败后返回的error,如果这个error不是nil就需要打印错误并退出进程了。

请求发送成功后我们就可以得到一个response,它由HTTP状态码、response header和response body组成,而这个body在go语言里是以流的形式存在的,为了避免资源泄露我们需要加一个defer来延迟关闭这个流。

最后我们通过ioutil.ReadAll来读取body流,并且将它打印出来。

运行

在分析完生成的代码的整体流程后,我们可以将它复制到goland里尝试着跑一下看看。

image.png

发现返回了一个html文件,这个正是刚刚那个登陆页面登录成功后显示的那个在线页面。

但这里有一个问题,在线页面是需要一直与后端握手才能实现WiFi校园网的长时间在线的,而我们这个程序显然无法实现这个功能,这就有些令人沮丧了,希望在之后的学习后我能掌握这个技术,然后做到真正能用程序登录校园网吧。