標籤:定向 ram 為什麼 出錯 沒有 技能 函數 read get
用Golang讓自己的電腦自動登入
1.緣起
大天朝的網路一般都是只對某些人開放的。上行下效,同樣的措施也作用在我們的教育網上。我想不出來,為什麼很多領導的總有這樣的惡趣味(如果做的到,他們恨不得監控下屬的一言一行)。每次在我們的教育網內上網,都必須經過一個“上網管理”系統。當然必定是需要“實名登記”的。對於我這樣的老老實實的已進化的猴子來說,這個顯然很是多餘,每次開機需要登入一次就很是不爽。那麼就發揮主觀能動性,讓它自動化吧。
2.邏輯
程式邏輯非常簡單,首先GET一個網頁(不好意思選用了baidu.com),如果沒有登入,“上網管理”系統會重新導向到它的登入頁面,我只需要搜尋返回的內容中是否含有需要登入的資訊,如果需要登入,則POST一個帳號資訊給它,從而實現自動登入。
3.實現
Golang中已經預置了很多網路訪問的包,訪問HTTP內容可以使用net/http包中的函數,使用非常簡單。代碼如下:
// 本程式用於新昌教育網自動登入用package mainimport ("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.Bodydata, _ := 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讓自己的電腦自動登入“上網管理”系統