當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 南昌OA系統(tǒng) > 南昌OA行業(yè)資訊
巧用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ò)管理效率的重要手段。
- 1企業(yè)服務(wù)器安全防護(hù)的七個(gè)切入點(diǎn)
- 2智能視頻分析中的貓膩
- 3淺談數(shù)據(jù)容災(zāi)備份的等級(jí)和技術(shù)
- 4打造新一代數(shù)據(jù)中心解決方案完整生態(tài)鏈
- 5數(shù)據(jù)中心綠化 配置管理至關(guān)重要
- 6巧用HTTP自動(dòng)訪問(wèn) 提高網(wǎng)絡(luò)管理效率
- 7云存儲(chǔ):技術(shù)、平臺(tái)還是服務(wù)?
- 8新一代SAS技術(shù)浮出水面
- 9SOA如何提升中國(guó)管理軟件產(chǎn)業(yè)?
- 10OA辦公為模糊查找“訂單”的查詢結(jié)果顯示
- 11移動(dòng)支付標(biāo)準(zhǔn):統(tǒng)一不統(tǒng)一?這是個(gè)問(wèn)題
- 12迅速掌握桌面虛擬化的八大問(wèn)題
- 13七大常見VM Manager虛擬機(jī)故障排查方法
- 14IT技術(shù)成為組織的核心戰(zhàn)略能力
- 15什么是web2.0?
- 16統(tǒng)一通信真的有效嗎
- 17泛普OA系統(tǒng)的車輛申請(qǐng)審批與使用
- 18協(xié)同OA軟件使用表單建模搭建了圖書管理
- 19物聯(lián)網(wǎng)三大應(yīng)用架構(gòu)
- 20Win 7錯(cuò)失PC桌面與云計(jì)算融合良機(jī)?
- 21ITSM價(jià)值體現(xiàn),從被動(dòng)管理走向平臺(tái)化
- 22虛擬化、刀片、節(jié)能 跨越數(shù)據(jù)中心的三道坎
- 23SOA設(shè)計(jì)模式應(yīng)用技巧:理解模式相互關(guān)系?
- 24基于FPGA技術(shù)的RFID板級(jí)標(biāo)簽設(shè)計(jì)與實(shí)現(xiàn)
- 25利用CMDB來(lái)對(duì)數(shù)據(jù)中心進(jìn)行變更管理
- 26小型數(shù)據(jù)中心的規(guī)劃和設(shè)計(jì)原則
- 27移動(dòng)互聯(lián)網(wǎng):你進(jìn)哪扇門
- 28后OA時(shí)代即將到來(lái)了
- 29節(jié)能是動(dòng)態(tài)數(shù)據(jù)中心管理的關(guān)鍵
- 30即時(shí)通信監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓