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

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

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

文章來(lái)源:泛普軟件

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

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

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

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

自動(dòng)修改認(rèn)證 服務(wù)器用戶數(shù)據(jù)

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

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

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

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

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

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

WEBFormSubmit(): 模擬點(diǎn)擊表單提交,IE控件完成實(shí)際提交動(dòng)作。

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

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

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

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

(3)點(diǎn)擊彈出窗口

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

(4)驗(yàn)證碼

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

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

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

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

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

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

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

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

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

以下舉例說(shuō)明庫(kù)函數(shù)開發(fā)要點(diǎn):

(1) 自動(dòng)登錄使用基本身份認(rèn)證

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

(2)點(diǎn)擊選擇SELECT對(duì)象的實(shí)現(xiàn)

VC定義了各種HTML對(duì)象。

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

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

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

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

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

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

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

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

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

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

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

(2) 基礎(chǔ)認(rèn)證:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(5) happyHTTP的不足和改進(jìn)

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

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

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

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

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

咨詢:400-8352-114

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

QQ在線咨詢

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

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