douxin2011 2016-01-06 00:09
浏览 32
已采纳

在Golang中发出发布请求

I'm trying to automate following using golang

  • generate password (done)
  • push notification to all devices (done using pushbullet)
  • change wifi router password at 192.168.0.1 (needs to be done)

Wifi Router page at 192.168.0.1 Wifi Router page

Here is a raw data captured using Fiddler. (When manually changed)

POST http://192.168.0.1/goform/form2WlanBasicSetup.cgi HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.1/d_wlan_basic.asp
Cookie: curShow=
X-Skyzip-Mode: high
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 233

domain=1&hiddenSSID=0&ssid=Home&band=9&chan=0&chanwid=1&txRate=0&method_cur=0&method=6&authType=2&length=1&format=1&defaultTxKeyId=1&key1=&pskFormat=0&pskValue=3ADI0NSXEAYOI0M&checkWPS2=1&save=Apply&basicrates=496&operrates=4080

and my golang code as follows

func RouterPass(pass string) {
    routerUrl := "http://192.168.0.1"
    resource := "/goform/form2WlanBasicSetup.cgi"
    data := url.Values{}
    data.Set("domain", "1")
    data.Add("ssid", "Home")
    data.Add("band", "9")
    data.Add("chan", "0")
    data.Add("chanwid", "1")
    data.Add("txRate", "0")
    data.Add("method_cur", "0")
    data.Add("method", "6")
    data.Add("authType", "2")
    data.Add("length", "1")
    data.Add("format", "1")
    data.Add("defaultTxKeyId", "1")
    data.Add("pskFormat", "0")
    data.Add("pskValue", pass)
    data.Add("checkWPS2", "1")
    data.Add("save", "Apply")
    data.Add("basicrates", "496")
    data.Add("operrates", "4080")

    u, _ := url.ParseRequestURI(routerUrl)
    u.Path = resource
    u.RawQuery = data.Encode()
    urlStr := fmt.Sprintf("%v", u) 

    client := &http.Client{}
    r, _ := http.NewRequest("POST", urlStr, nil)
    // r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    r.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))

    resp, _ := client.Do(r)
    fmt.Println(pass)
    fmt.Println(resp.Status)
}

But I'm not able to change password. What am I doing wrong?

  • 写回答

1条回答 默认 最新

  • douyou2732 2016-01-06 09:27
    关注

    Hopefully, this will help others.

    Code that worked

    func ChangePassword(password string) {
        hc := http.Client{}
        routerURL := "http://192.168.0.1/goform/form2WlanBasicSetup.cgi"
        form := url.Values{}
        form.Add("domain", "1")
        form.Add("hiddenSSID", "0")
        form.Add("ssid", "Linux-PC")
        form.Add("band", "9")
        form.Add("chan", "0")
        form.Add("chanwid", "1")
        form.Add("txRate", "0")
        form.Add("method_cur", "0")
        form.Add("method", "6")
        form.Add("authType", "2")
        form.Add("length", "1")
        form.Add("format", "1")
        form.Add("defaultTxKeyId", "1")
        form.Add("key1", "")
        form.Add("pskFormat", "0")
        form.Add("pskValue", password)
        form.Add("checkWPS2", "1")
        form.Add("save", "Apply")
        form.Add("basicrates", "496")
        form.Add("operrates", "4080")
        req, err := http.NewRequest("POST", routerURL, strings.NewReader(form.Encode()))
        if err != nil {
            panic(err)
        }
        req.PostForm = form
        req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0")
        req.Header.Add("Referer", "http://192.168.0.1/d_wlan_basic.asp")
        req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    
        fmt.Println(form)
        resp, err := hc.Do(req)
        if err != nil {
            panic(err)
        }
        fmt.Println(resp.Status)
        fmt.Println(password)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!