用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让自己的电脑自动登录“上网管理”系统的更多相关文章

  1. 使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员

    一.项目需求 每周从A系统生成一张Excel报表,发送此报表给指定人员,相关人员依据此报表去完成后续的工作. 项目限制: 1.无法通过EDI系统交互的方式从后台读取数据 2.由于公司网络环境限制,不能 ...

  2. windows 2003自动登录的具体步骤

    在win2003系统中,使用最多的可能就是远程操作了,关于远程操作的那些事很多用户还是有些迷茫的.如果win2003系统远程重启后,要重新登录系统十分的麻烦,如何才能实现重启后的自动登录呢?让高手告诉 ...

  3. UnifyRemoteManager-多国语言绿色版v1.3-20200315,统一远程连接自动登录软件,欢迎测试

    UnifyRemoteManager-多国语言绿色版v1.3-20200315,统一远程连接自动登录软件,欢迎测试 下载参考: 百度网盘:https://pan.baidu.com/s/15g-oXT ...

  4. Radmin自动登录器 v3.0

    Radmin自动登录器 v3.0 - By: ybmj@vip.163.com 20150615 用户手册 下载地址:https://download.csdn.net/download/shuren ...

  5. [转]ubuntu server:开机自动登录

    原文链接: Ed29.com http://ed29.com/ubuntu%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95 ...

  6. C# 自动登录网页,浏览页面【转载】

    需求:客户的数据同时存在在另外一个不可控的系统中,需要和当前系统同步. 思路:自动登录另外一个系统,然后抓取数据,同步到本系统中. 技术点:模拟用户登录:保存登录状态:抓取数据 /// <sum ...

  7. 用python实现自动化登录禅道系统 设置定时器自动执行脚本

    由于各种原因,我想试下用python实现自动登录禅道系统,并且每天定时执行.(本人第一次接触自动化,在大佬眼中门槛都没摸到的类型) 首先缕清思路: 1.实现自动登录禅道系统,用selenium实现2. ...

  8. windows server 开机自动登录并锁定

    这个操作对于广大使用Windows(包括xp/win7/2003/2008 R2 等windows 系统) 的上班族会有点用. 其一:如果是个人吧系统(win7.xp)上班时候打开电脑,自动登录,系统 ...

  9. 让Win8自动登录免输入密码的小技巧

    按Win+R键,输出“netplwiz”,单击“确定”,弹出“用户帐户”窗口.将第一个画框上的勾选去掉——应用——弹出自动登录输入你的密码——确定——确定完成.重启看看电脑是不是不用输入密码也可以自动 ...

随机推荐

  1. [Android]使用化名(alias)功能防止相同资源的重复

    在为一个应用匹配不同资源文件的时候,有时可能需要在不同适配类型的资源路径下使用相同的资源文件,这时使用alias方法可以防止相同资源文件的重复,提高效率.以下摘自Android开发文档http://d ...

  2. effective c++ 条款7

    1.随着多态基类应该声明一个质virtual析构函数. 假定class由于不管是什么virtual析构函数, 它应该有一个virtual析构函数. 2.classed的设计目的假设不是作为base c ...

  3. apply plugin: 'idea' --- gradle idea

    如果你的项目使用了Gradle作为构建工具,那么你一定要使用Gradle来自动生成IDE的项目文件,无需再手动的将源代码导入到你的IDE中去了. 如果你使用的是eclipse,可以在build.gra ...

  4. 一个2013届毕业生(踏上IT行业)的迷茫(4)

    等了大概三个月,终于到9月份了,以前没有出过远门,这次要去西安上学,一个人父母还是不放心,带了几件衣服就和父亲匆匆去坐火车,这一路有多少个第一次啊,第一次和父亲一块坐车.第一次坐火车.第一次出县城.第 ...

  5. WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

    原文 WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object) 众所周知的,WPF 中多数对象都继承自 Dispatch ...

  6. Mac的GUI哲学

    GUI 哲学 前些日子,看了 Tinyfool 老师的一篇文章<开发人员为何应该使用 Mac OS X 兼 OS X 小史>,才恍然 Mac 系统可不仅仅是 UI 上与 Windows 大 ...

  7. Android之高仿手机QQ聊天

    源代码下载 转载请注明出处,谢谢! 最终版已上传.优化下拉刷新.增加来消息声音提示.主界面改成ViewPager,实现左右滑动.新增群组.最近会话显示条数,开始上班了,不再修改了.谢谢! 国庆这几天, ...

  8. hadoop编程技巧(6)---处理大量的小型数据文件CombineFileInputFormat申请书

    代码测试环境:Hadoop2.4 应用场景:当需要处理非常多的小数据文件,这种技术的目的,可以被应用到实现高效的数据处理. 原理:申请书CombineFileInputFormat,能够进行切片合并的 ...

  9. QT之圆形头像(使用PNG的Mask达到的效果)

    废话不多说!直接上代码. 我们在很多UI设计应用中,需要用到自定义形状头像,在这里,我对圆形头像的设计做简单的阐述,其它形状头像可参考本文做相应的更改即可.如下图所示为设计的圆形头像: 上代码: Se ...

  10. Python3获取股票行情数据(中国个股/中国指数/全球指数)

    #!/usr/local/bin/python3 #coding=utf-8 #source http://www.cnblogs.com/txw1958/ import os, io, sys, r ...