1. 程式人生 > >WiFi QC自動測試:Qt控制無線路由器

WiFi QC自動測試:Qt控制無線路由器

 這裡在介面上放置了一個PlaintextEdit和兩個按鈕,上述的兩個函式分別對應每一個按鈕的點選事件。   Qt提供了訪問HTTP很簡單的方式,使用它的API能夠輕鬆地實現HTTP資料的互動。   可以看到一開始初始化了一個QNetworkAccessManager,當資料到達客戶端的時候replyFinished函式就會被呼叫。   在這個函式裡面,我判斷了三種情況,其中比較特殊的就是AuthenticationRequiredError的事件。   當開啟Tplink路由器的時候,路由器就會彈出一個需要認證的介面從而觸發這個事件。實際上從HTTP互動的header可以看出來。   TPLINK740N使用的是HTTP摘要認證,可以看看此部落格瞭解詳情:   點選開啟連結   當點選按鈕觸發on_init_clicked的時候,就會最終觸發AuthenticationRequiredError的事件,因為沒有給AP提供密碼。接下來的每次互動中都需要給AP提供密碼來保證訪問的成功:   req.setRawHeader("Authorization", "Basic YWRtaW46YWRtaW4=");   其中YWRtaW46YWRtaW4=是從admin:admin產生的,欲知詳情可以開啟上面提供的連結。   實際上,HTTP頭部有很多欄位,這裡只使用了最重要的一個,其他的Qt會自動幫我們加的(好方便!)   當點選按鈕觸發on_start_clicked的時候,就可以成功設定AP了,上面設定的效果如下:   聰明的你很容易修改這個字串來達到你想要的效果:   QString get_str = "http://192.168.2.1/userRpm/WlanNetworkRpm.htm?ssid1=haha&wlMode=2&channel=3&mode=5 \   &chanWidth=2&ap=1&broadcast=2&brlssid=&brlbssid= \   &keytype=1&wepindex=1&authtype=1&keytext=&Save=%B1%A3+%B4%E6 HTTP/1.1";   最終可以給每一個AP提供一個配置檔案,因為上層可以做到一致(SSID、channel等設定),所以很容易實現自動化   另外,從AuthenticationRequiredError給出的資訊裡面(rawHeaderPairs)可以判斷AP的型號