用Golang让自己的电脑自动登录“上网管理”系统
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Golang让自己的电脑自动登录“上网管理”系统相关的知识,希望对你有一定的参考价值。
用Golang让自己的电脑自动登录
1.缘起
大天朝的网络一般都是只对某些人开放的。上行下效,同样的措施也作用在我们的教育网上。我想不出来,为什么很多领导的总有这样的恶趣味(如果做的到,他们恨不得监控下属的一言一行)。每次在我们的教育网内上网,都必须经过一个“上网管理”系统。当然必定是需要“实名登记”的。对于我这样的老老实实的已进化的猴子来说,这个显然很是多余,每次开机需要登录一次就很是不爽。那么就发挥主观能动性,让它自动化吧。
2.逻辑
程序逻辑非常简单,首先GET一个网页(不好意思选用了baidu.com),如果没有登录,“上网管理”系统会重定向到它的登录页面,我只需要搜索返回的内容中是否含有需要登录的信息,如果需要登录,则POST一个帐号信息给它,从而实现自动登录。
3.实现
Golang中已经预置了很多网络访问的包,访问HTTP内容可以使用net/http包中的函数,使用非常简单。代码如下:
// 本程序用于新昌教育网自动登录用
package main
import (
"flag"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
)
func main() {
//下面三句用于处理参数,注意flag.Parse()必须调用。
//flag包非常实用,可以自动处理命令行参数的很多细节。
//比如:自动处理--help,它会输出我们设定的信息
user := flag.String("user", "", "input your user name.")
pwd := flag.String("pwd", "", "input your password.")
flag.Parse()
if *user == "" || *pwd == "" {
fmt.Println("please input user name and password!")
return
}
//GET一个网页,注意把response关闭掉
//我使用了golang的一个技能:defer,它能在函数结束前执行指定内容
res, err := http.Get("http://www.baidu.com")
if err != nil {
fmt.Println("network is error.")
return
}
defer res.Body.Close()
//使用ioutil中的函数方便的读取GET到的网页内容。虽然我们也可以自己读取,但哪有这样方便啊。
data, _ := ioutil.ReadAll(res.Body)
//查找是否有“未登录”的字符串
idx := strings.Index(string(data), "<title>上网认证系统 - 登录</title>")
if idx != -1 {
//使用net/url包来管理post数据,对于简单的ASCII内容来说可以简单的自己合成字符串。
//但使用它,可以保证不会出错。
v := url.Values{}
v.Set("username", *user)
v.Set("password", *pwd)
v.Set("pwd", *pwd)
body := strings.NewReader(v.Encode()) //把form数据编下码
//建立HTTP对象
client := &http.Client{}
//建立http请求对象
req, _ := http.NewRequest("POST", "http://172.16.254.10/webAuth/", body)
//这个一定要加,不加form的值post不过去
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value")
resp, _ := client.Do(req) //发送
defer resp.Body.Close() //关闭resp.Body
data, _ := ioutil.ReadAll(resp.Body)
idx := strings.Index(string(data), "<font color=\"red\">登陆成功, 您可以上网了</font>")
if idx != -1 {
fmt.Println("login success!")
}
//fmt.Println(string(data), err)
} else {
fmt.Println("you are alread login!")
}
}
所有代码已经进行了注释,相信大家可以轻松的阅读。
4.使用
我平时一般用windows平台,这里我讲一下windows平台下的用法。首先用golang生成exe文件;然后左击这个exe文件“创建快捷方式”,编辑这个快捷方式,右键点击快捷方式,点击属性,在“目标”中加上我们的登录帐号和密码,可能如下(注意自己的可执行文件路径):
F:\gofile\src\edu-login\edu-login.exe -user=xxxx -pwd=xxx
然后把这个快捷方式拖到windows的启动文件夹。winxp和windows7稍有不同,大家可以搜索一下解决方法。因为太简单了,这里不作介绍。
5.总结
至此,我们高大上的自动登录软件就做好了。现在大家都可以享受到程序猿的便利了。使用golang不仅可以实现自动登录,使用它来编写个网络爬虫也是轻松如意,而且配合GOLANG的独特语言功能,爬虫性能也会极好。
http://www.misitang.com/index.php/archives/117/
以上是关于用Golang让自己的电脑自动登录“上网管理”系统的主要内容,如果未能解决你的问题,请参考以下文章
golang爬虫登录(四-进阶版)以及利用fiddler抓包