監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產(chǎn)品資料
X 關(guān)閉

巧用HTTP自動訪問 提高網(wǎng)絡(luò)管理效率

申請免費試用、咨詢電話:400-8352-114

文章來源:泛普軟件

HTTP協(xié)議的瀏覽器是人們訪問互聯(lián)網(wǎng)常用的主要手段。目前使用程序自動訪問Web網(wǎng)頁尚屬于黑客技術(shù)范疇,經(jīng)常用于自動點擊網(wǎng)頁廣告、自動搶注冊等活動,很多網(wǎng)頁設(shè)置驗證碼試圖阻止機器登錄。隨著互聯(lián)網(wǎng)的普及,大量專業(yè)應(yīng)用以及網(wǎng)絡(luò)通信設(shè)備都使用Browser/Server界面實現(xiàn),操作人員使用瀏覽器往往需要做大量簡單重復(fù)、相對固定的操作,利用程序自動訪問可以大幅提高操作效率和操作正確性。

在瀏覽器接口實現(xiàn)自動訪問,實質(zhì)是由程序代替操作人員操作瀏覽器,優(yōu)點是直觀,可參照人工瀏覽器操作和響應(yīng)編程,易于處理網(wǎng)絡(luò)不穩(wěn)定、服務(wù)器響應(yīng)延遲等情況; 缺點是編程較為復(fù)雜。

在服務(wù)器接口實現(xiàn)自動訪問,實質(zhì)上是由程序取代瀏覽器直接和服務(wù)器交互,優(yōu)點是編程簡單,但要求對HTTP協(xié)議有較深入的了解,詳細分析頁面動作。

我們可以針對不同應(yīng)用,根據(jù)實際情況,選擇合適的方法。

自動修改認證 服務(wù)器用戶數(shù)據(jù)

下面介紹一個實際應(yīng)用案例: 某企業(yè)要通過電信提供的Web界面的用戶信息管理系統(tǒng),管理上萬個用戶賬號,人工操作復(fù)雜、錯誤率高、響應(yīng)不及時,尤其在要求限時更新全部用戶賬號時,人工操作根本不可能完成。為此,某企業(yè)開發(fā)了一個自動管理用戶程序,應(yīng)用Windows系統(tǒng)VC++模擬人工瀏覽器操作實現(xiàn),由于找到成熟網(wǎng)頁操作函數(shù)庫比較困難,該企業(yè)找到了網(wǎng)絡(luò)佚名作者的WebAuto(1.0.0.1)提供的一些簡單易用的網(wǎng)頁基本操作函數(shù),剛好滿足項目的需要,開發(fā)要點如下:

(1)網(wǎng)頁操作

VC支持MicroSoft Web Browser ActiveX控件,在系統(tǒng)自動產(chǎn)生的事件處理函數(shù)DocumentCompleteExplorer1()中可獲取服務(wù)器響應(yīng)的(IHTMLDocument2 *)類型的 HTML文檔,并可在該文檔上實現(xiàn)瀏覽器交互操作,瀏覽器控件可直觀顯示操作結(jié)果。 WebAuto.dll提供了幾個基本的網(wǎng)頁操作函數(shù):

WEBInputValue(): 在指定名字的文本框輸入文本值;

WEBExecScriptFunc(): 執(zhí)行指定函數(shù)名的JavaScript函數(shù);

WEBElemClick(): 可點擊單選按鈕;

WEBFormSubmit(): 模擬點擊表單提交,IE控件完成實際提交動作。

(2)判斷返回結(jié)果

根據(jù)控件的get_LocationURL()判斷是否轉(zhuǎn)到目的網(wǎng)頁。

WEBGetFrameDoc(): 從含有Frame框架文檔中讀取Frame內(nèi)含文檔;

WEBGetSource():讀取目的文檔源碼,判斷是否有預(yù)期結(jié)果。

(3)點擊彈出窗口

有些網(wǎng)頁用alert()彈出Message窗口,提示輸入錯誤和返回結(jié)果,并一直等待人工輸入。調(diào)用WEBDlgClick()函數(shù)自動點擊彈出窗口,結(jié)束等待。也可根據(jù)函數(shù)返回值判斷返回文本,確定操作結(jié)果成功或失敗,或者超時無響應(yīng),即沒有彈出預(yù)期的窗口。在網(wǎng)絡(luò)不穩(wěn)定的情況下,應(yīng)在定時延遲進程中執(zhí)行自動點擊操作。

(4)驗證碼

網(wǎng)站的驗證碼用于防止程序自動登錄。驗證碼在網(wǎng)頁中用動態(tài)URL表示,WEBVerifyCode函數(shù)調(diào)用驗證碼URL,在屏幕顯示出來,等待人工查看并輸入。關(guān)于如何自動識別驗證碼,隨不同網(wǎng)站驗證碼圖像復(fù)雜程度不同差異很大。

通過自動訪問Web技術(shù)能夠?qū)崿F(xiàn)用戶賬號全程自動管理,并且在批量修改時可達到40條/分鐘的處理速度,幾個小時即可完成上萬條數(shù)據(jù)修改,從而滿足批量修改的需求。

網(wǎng)頁操作函數(shù)庫的開發(fā)

某企業(yè)利用WebAuto.dll滿足了該項目開發(fā)要求,思路是將網(wǎng)頁的操作分解為基本動作,基本動作開發(fā)相應(yīng)的函數(shù),既大大降低了應(yīng)用程序編程工作量,又避免了庫函數(shù)開發(fā)過于復(fù)雜。但它還很不完善,為滿足自動訪問,一般網(wǎng)頁要求至少需要增加和完善以下函數(shù)或功能:

(1)自動登錄需要使用基本驗證保護的網(wǎng)站,即在彈出窗口自動輸入用戶和密碼;

(2)增加設(shè)置SELECT對象,即選擇點擊選擇下拉菜單的函數(shù);

(3)增加對多Frame網(wǎng)頁和多表單文檔的支持;

(4)支持點選單選按鈕組,即同一名字多個值輸入。

其中自動登錄和點擊確定窗口屬于利用Windows系統(tǒng)函數(shù)實現(xiàn),其他都是利用VC的瀏覽器對象類對HTML文檔交互操作。

以下舉例說明庫函數(shù)開發(fā)要點:

(1) 自動登錄使用基本身份認證

需要在彈出登錄窗口輸入用戶名、密碼,點擊確定。應(yīng)在訪問網(wǎng)頁前設(shè)置定時程序,在定時程序中調(diào)用自動登錄程序。自動登錄是嵌套窗口結(jié)構(gòu)。注意彈出登錄窗口不是瀏覽器的子窗口,故先調(diào)用FindWindow()根據(jù)窗口標題找到登錄窗口的句柄,再調(diào)用FindWindow()根據(jù)窗口類名或標題找到各個子窗口,再SendMessage()向各窗口發(fā)送消息,設(shè)置記憶選擇為“不記憶”。

(2)點擊選擇SELECT對象的實現(xiàn)

VC定義了各種HTML對象。

實現(xiàn)方法是調(diào)用各文檔對象的get_forms()獲得表單集合,再依次調(diào)用各對象的item(),QueryInterface,get_name()獲得目標SELECT對象,最后調(diào)用SELECT 的put_selectedIndex()方法設(shè)置選擇的值。支持多表單的就是get_forms(),讀出包含所有表單的集合,逐一讀出表單名稱,取出與目標表單名稱相符的表單即可。

Web操作函數(shù)庫雖然每條函數(shù)只有幾十條語句,主要使用各種系統(tǒng)定義各種類型參數(shù)調(diào)用各種系統(tǒng)函數(shù),編程和調(diào)測還是相對繁雜。將訪問網(wǎng)頁行為分解為十幾個對應(yīng)函數(shù),簡單地用表單對象名字做參數(shù),接口簡單易用,把復(fù)雜的系統(tǒng)函數(shù)調(diào)用封裝到函數(shù)內(nèi),開發(fā)自動訪問Web應(yīng)用程序就比較容易了。

Linux系統(tǒng)自動設(shè)置網(wǎng)絡(luò)設(shè)備

上文提到的某企業(yè)還有一些分散各地的辦公網(wǎng)點,需要自動設(shè)置ADSL PPPOE撥號連接。絕大多數(shù)路由器僅提供Web界面設(shè)置,只有開發(fā)HTTP自動訪問程序,才能滿足動態(tài)自動配置的需要。

在Linux環(huán)境下,無需理會可視操作界面和彈出窗口、網(wǎng)絡(luò)延遲等,采用服務(wù)器接口比較適宜。

“Haxx”的開源項目libcurl提供了Linux和Windows等平臺下客戶端和Web服務(wù)器間用于實現(xiàn)HTTP協(xié)議交換數(shù)據(jù)的函數(shù)庫。但是由于該企業(yè)系統(tǒng)對存儲空間要求苛刻,無法使用功能豐富的libcurl庫函數(shù),必須轉(zhuǎn)而尋找盡量簡單的實現(xiàn)基本HTTP協(xié)議的函數(shù)庫。Ben Campbell開發(fā)的開源軟件happyHTTP僅用一個C++源文件就可實現(xiàn)簡單的HTTP協(xié)議。

以下介紹用happyHTTP實現(xiàn)自動設(shè)置路由器的開發(fā)要點:

(1) 程序結(jié)構(gòu)

HTTP協(xié)議客戶端請求和服務(wù)器響應(yīng)基本結(jié)構(gòu)(服務(wù)器響應(yīng)無請求頭):

happyHTTP定義一些基本類實現(xiàn)構(gòu)造和發(fā)送請求,接收和分析響應(yīng)的功能。

調(diào)用happyHTTP的:Connection對象的request函數(shù)發(fā)送GET/POST,調(diào)用Connection的pump()函數(shù)處理來自服務(wù)器的響應(yīng)。在定義的CALLBACK函數(shù)中獲取服務(wù)器響應(yīng)文檔的相關(guān)信息。

(2) 基礎(chǔ)認證:

絕大多數(shù)路由器用基礎(chǔ)認證,登錄時要求輸入用戶名和密碼,RFC2617描述了基礎(chǔ)認證過程:

①客戶端發(fā)送URL請求;

②服務(wù)端發(fā)送401文檔(無權(quán)限),并在HEADER加入“WWW-Authenticate”屬性,聲明要求basic authentication;

③客戶端重新發(fā)送請求,并在以后發(fā)送請求HEADER加入” Authorization”屬性,設(shè)置為經(jīng)過base64編碼的用戶名和密碼。

這個過程在上一個應(yīng)用中由瀏覽器控件自動處理。在本應(yīng)用中調(diào)用request模擬瀏覽器發(fā)送認證響應(yīng),在設(shè)置完成前保持連接會話。Base64是簡單地將二進制數(shù)據(jù)編碼為ASCII碼的編碼方法,可在libcurl源碼中找到該函數(shù)。

極少數(shù)路由器采用動態(tài)網(wǎng)頁登錄,不需要基本驗證,登錄操作就是普通提交表單操作。

(3) 確定請求發(fā)送內(nèi)容和響應(yīng)處理

設(shè)置一個網(wǎng)頁在提交時需要將設(shè)置內(nèi)容發(fā)送到路由器。Request請求頭目標URL表單ACTION指向。如上所述,HEADER應(yīng)有身份驗證屬性和保持連接屬性.BODY則是提交網(wǎng)頁需要發(fā)送的參數(shù)。

通過分析網(wǎng)頁文件,確定發(fā)送的項目和如何處理服務(wù)器的響應(yīng),這是比較復(fù)雜的過程。好在有HTTP協(xié)議監(jiān)控器,可記錄請求和響應(yīng)的詳細內(nèi)容。實際編程時可借助HTTP協(xié)議監(jiān)控器,如EffeTech Http Sniffer,人工進行網(wǎng)頁操作,參照EffeTech記錄結(jié)果,設(shè)計發(fā)送和接收內(nèi)容。注意在設(shè)置結(jié)束前,在請求頭中設(shè)置Connection屬性為 “Keep-Alive”,保持會話連接,準確模擬人工執(zhí)行連續(xù)操作結(jié)果。

(4) 判斷操作執(zhí)行結(jié)果

①用重定向進行地址判斷。服務(wù)器執(zhí)行完操作后,轉(zhuǎn)向相應(yīng)網(wǎng)頁,或轉(zhuǎn)向錯誤網(wǎng)頁,服務(wù)器給出303(重定向)文檔,在HEADER Location屬性中可判斷是否轉(zhuǎn)向正確網(wǎng)頁。

②如需要判斷網(wǎng)頁內(nèi)容,可查找文檔BODY中指定信息,用于監(jiān)控路由器狀態(tài),如是否已撥號連接成功。

③超時無響應(yīng)情況下,響應(yīng)處理函數(shù)pump()會超時退出,拋出異常。

應(yīng)用happyHTTP實現(xiàn)了自動配置功能,正確模擬了人工操作結(jié)果,目標代碼只有80KB左右,可滿足存儲空間苛刻的要求。

(5) happyHTTP的不足和改進

happyHTTP1.0對HTTP協(xié)議處理不完善,存在BUG,需要原作者改進。在對存儲和內(nèi)存要求不嚴格的應(yīng)用中,推薦使用較為成熟的開源項目libcurl。

隨著Web應(yīng)用不斷增加和相關(guān)工具不斷完善,通過HTTP Web界面自動訪問系統(tǒng)將成為提高網(wǎng)絡(luò)管理效率的重要手段。

發(fā)布:2007-04-21 11:20    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
南昌OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普南昌OA行業(yè)資訊其他應(yīng)用

南昌OA軟件 南昌OA新聞動態(tài) 南昌OA信息化 南昌OA快博 南昌OA行業(yè)資訊 南昌軟件開發(fā)公司 南昌門禁系統(tǒng) 南昌物業(yè)管理軟件 南昌倉庫管理軟件 南昌餐飲管理軟件 南昌網(wǎng)站建設(shè)公司