golang post使用者名稱密碼登陸的巨坑
摘要:
http的Header設定,按照官網或者大部分文章的設定來就可以,如下:
client := &http.Client{Transport: nil}
req, err := http.NewRequest("POST", post_logi...
- http的Header設定,按照官網或者大部分文章的設定來就可以,如下:
client := &http.Client{Transport: nil} req, err := http.NewRequest("POST", post_login_info_url, strings.NewReader(string(info))) if err != nil { panic(err) } //header req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36") req.Header.Set("Content-Type", "application/json;charset=UTF-8")
- golang的http form data資料設定,golang.com官網的例子和網上大部分的文章使用url.Values最後提交的時候資料不能到達後臺。最後實在沒辦法,通過http client的transparent結合charles抓包,仔細對比網頁直接請求和go請求的差異才把問題解決。 請求的form表單資料是一段json資料,而url.Values不行
- 錯誤的情況
postValues := url.Values{} postValues.Add("expire", "7") postValues.Add("referer", "http%3A%2F%2Fwww.jikexueyuan.com%2F") postValues.Add("uname", username) postValues.Add("password", password) postValues.Add("verify", verify_code) req, err := http.NewRequest("POST", post_login_info_url, strings.NewReader(postValue.Encode()))
- 正確的姿勢
loginInfo := LoginInfo{ Username: username, Password: password, LoginYzm: "", } info, err := json.Marshal(loginInfo) req, err := http.NewRequest("POST", post_login_info_url, strings.NewReader(string(info)))