版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2.9HTTP應(yīng)用2.9.1HTTP應(yīng)用開發(fā)的分類?HTTP客戶?HTTP服務(wù)器?服務(wù)器端應(yīng)用程序2.9.2HTTP應(yīng)用開發(fā)方法?使用Socket編程接口?使用動(dòng)態(tài)鏈接庫(kù)或ActiveX控件
冠曰莎狗草拘矮切五扁歌暴懈總署趾侈窯壟沾劍碧籌埂明附勵(lì)宋窮屢墩塹HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程本講內(nèi)容2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用?InternetTransfer控件屬性?InternetTransfer控件方法?InternetTransfer控件事件2.9.4使用WinInet開發(fā)HTTP客戶端應(yīng)用?示例?主要實(shí)現(xiàn)步驟濕濫乖辮巷匠橢包包舵蛇野峙螺普標(biāo)另宵禮晰鈾鬧俏廷形砍筐洽構(gòu)莉撐付HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類1.1HTTP客戶程序?HTTP協(xié)議作為Web的技術(shù)組件之一為Web的成功奠定了重要的基礎(chǔ)它提供了客戶和服務(wù)器進(jìn)行交互的機(jī)制并對(duì)交互的語(yǔ)法和語(yǔ)義制定了統(tǒng)一的標(biāo)準(zhǔn)?Web上很多應(yīng)用的開發(fā)都與HTTP協(xié)議有著關(guān)聯(lián)或者圍繞著HTTP協(xié)議展開或者需要HTTP協(xié)議的支持?可以說(shuō)HTTP協(xié)議貫穿了Web上多個(gè)層次的應(yīng)用開發(fā)如圖所示
?從該圖中可以看出HTTP應(yīng)用可以分為三種類型HTTP客戶程序現(xiàn)西悉飄付也到俏繕學(xué)訛摳歸桶邁椅辜微填歸輾莊酌吟索慣騙闡礬恕黃司HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))–HTTP客戶程序?HTTP客戶程序可以看作是一種用戶代理agent,它的作用是代表用戶和Web服務(wù)器進(jìn)行交互,以實(shí)現(xiàn)下載文檔提交信息等目的。?一些典型的HTTP客戶程序包括?Web瀏覽器:其用途主要是供用戶瀏覽Web服務(wù)器上的HTML文檔。例如NetscapeNavigatorMicrosoftIE等?Web文檔下載工具:其用途主要是采用斷點(diǎn)續(xù)傳多線程等手段幫助用戶快速地從Web服務(wù)器上下載資源。例如NetAntsNetVampire等?WebRobot:其用途主要是出于信息檢索等目的而對(duì)Web遍歷,即從某個(gè)URL開始沿著Web上的超鏈采用深度優(yōu)先或廣度優(yōu)先的方法來(lái)下載所有的Web頁(yè)面。例如Altavista等搜索引擎中均使用了這種程序
灸震胖霧法爹訊蕊灶糜什齋鬼顏搗掠培腺攏開肚巒矮代篷懲轅剎令蠕痛塌HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))HTTP客戶程序的基本功能雖然上述各個(gè)HTTP客戶程序的作用和實(shí)現(xiàn)方法各不相同,但至少都具備以下兩項(xiàng)基本功能:?與用戶的交互-提供人機(jī)交互的手段可視化界面或者命令行方式供用戶來(lái)表達(dá)其要求,同時(shí)將執(zhí)行的結(jié)果展現(xiàn)給用戶。-對(duì)于最終用戶而言,要求他們掌握HTTP中的各種消息的語(yǔ)法和語(yǔ)義是不現(xiàn)實(shí)的,因此人機(jī)交互要盡可能地簡(jiǎn)單直觀。例如在Web瀏覽器中,用戶僅給出要瀏覽的Web頁(yè)面的地址就可以看到該頁(yè)面,至于使用HTTP協(xié)議來(lái)實(shí)現(xiàn)這一目的細(xì)節(jié)對(duì)用戶是透明的,這些工作應(yīng)該由HTTP客戶程序代替用戶完成。榮勘粒礦聊抗趟喘挑被怠善壁弟吝菌鴕移貼難碌幣文漫掏梆菲匈筑殿詣媽HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))?與服務(wù)器的交互-根據(jù)用戶提出的要求按照HTTP協(xié)議規(guī)范和服務(wù)器進(jìn)行交互,以完成用戶的要求-處理如何和服務(wù)器建立連接,使用何種語(yǔ)法格式來(lái)發(fā)送請(qǐng)求消息、如何解釋服務(wù)器的響應(yīng)消息等問(wèn)題。這一切都要遵循HTTP協(xié)議中給出的規(guī)定可以看出,一個(gè)HTTP客戶程序?qū)嶋H上是HTTP協(xié)議內(nèi)容的部分實(shí)現(xiàn)。因此要能夠開發(fā)HTTP客戶程序就應(yīng)該透徹地理解HTTP協(xié)議中給出的客戶和服務(wù)器的交互機(jī)制,正確地掌握各種消息的語(yǔ)法和語(yǔ)義規(guī)范需要說(shuō)明的是除了要實(shí)現(xiàn)上述基本功能以外HTTP客戶程序可能還要具備一些與HTTP協(xié)議本身無(wú)關(guān)的功能例如一個(gè)Web瀏覽器除了能夠根據(jù)用戶的要求將指定的Web頁(yè)面下載下來(lái),還要能夠按照HTML規(guī)范對(duì)該頁(yè)面進(jìn)行解析,并在可視化的界面上將其展現(xiàn)出來(lái)笆挪傾黎狙續(xù)知賒蛋扎梢衛(wèi)毯鈴廂攝位木一饋補(bǔ)邏求沈鞠雖研次食陸穢軸HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))下面我們以Web瀏覽器為例對(duì)HTTP客戶程序的內(nèi)部結(jié)構(gòu)進(jìn)行粗略的分析要奪薔橡析優(yōu)搏宛燒窘左夜釘蛇歇膛渾銜鐵互損著蠕林鱗叔殲塌滾腦虱稗HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))該Web瀏覽器由以下幾個(gè)部分組成:
用戶接口:接收用戶的輸入,并將服務(wù)器返回的響應(yīng)展示給用戶。
用戶輸入解析器:對(duì)用戶輸入進(jìn)行解析,并將結(jié)果傳送給控制器。
控制部分:是Web瀏覽器的核心部分,負(fù)責(zé)協(xié)調(diào)各個(gè)部件的運(yùn)作。HTTP客戶:如果用戶的輸入是要求訪問(wèn)HTTP服務(wù)器,那么就將其以HTTP請(qǐng)求消息的形式提交給服務(wù)器,并接收和解析服務(wù)器的響應(yīng)。
其它客戶用戶:可能還會(huì)訪問(wèn)Internet上的FTP等服務(wù),因此需要有基于相應(yīng)協(xié)議的客戶部分,例如FTP客戶。HTML解析器:如果服務(wù)器返回的消息中包含HTML文件,那么對(duì)其按照HTML語(yǔ)法進(jìn)行解析。
其它解析器:如果HTML文件中包含腳本語(yǔ)言等成分,例如VBScript,那么對(duì)其按照相應(yīng)的規(guī)范進(jìn)行解析,在后面的章節(jié)中我們將對(duì)VBScript進(jìn)行詳細(xì)討論。
格式化顯示:將解析結(jié)果輸出到可視化界面上供用戶瀏覽。沸垂脊滇嚎犬著墑權(quán)復(fù)痢槽仇弘伶菊呀瞳勸鉤曼漫蒼諄酣肇疹覆廖鍛奧閡HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))1.2HTTP服務(wù)器程序–HTTP服務(wù)器HTTP服務(wù)器程序的作用是為用戶提供服務(wù)。例如返回用戶想瀏覽的文檔等,為了實(shí)現(xiàn)這一目標(biāo),HTTP服務(wù)器程序必須按照HTTP協(xié)議規(guī)范和客戶進(jìn)行交互。?如何和客戶建立連接?如何解釋客戶的請(qǐng)求消息?如何按照用戶的要求執(zhí)行相應(yīng)的處理?使用何種語(yǔ)法格式來(lái)將處理結(jié)果作為響應(yīng)消息返回給客戶
一個(gè)HTTP服務(wù)器程序?qū)嶋H上也是HTTP協(xié)議內(nèi)容的部分實(shí)現(xiàn),因此要能夠開發(fā)HTTP服務(wù)器程序也應(yīng)該透徹地理解HTTP協(xié)議中給出的客戶和服務(wù)器交互機(jī)制,正確地掌握各種消息的語(yǔ)法和語(yǔ)義規(guī)范。枝嫁酚惺癬退濃圃飲牧噓傘持誰(shuí)伴帆跳薄箍翠合析抽閃在趣癢癱讕芹裔力HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))需要說(shuō)明的是除了要實(shí)現(xiàn)上述基本功能以外,HTTP服務(wù)器程序還要具備其它的一些功能:?能夠?qū)⒖蛻籼峤坏男畔鬟f給CGI程序或ASP腳本等服務(wù)器端應(yīng)用程序?接收服務(wù)器端應(yīng)用程序的輸出結(jié)果等?這些功能的實(shí)現(xiàn)又依賴于服務(wù)器與服務(wù)器端應(yīng)用程序的接口規(guī)范,例如CGI、ISAPI等。如圖所示:眼挖敝加異塵頒躍綻概動(dòng)渾蛤趨臀易層懲保渙花筏亞垛亢艘樓余靳啦啄廈HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))障壕墑乎斌敞指朱腆奈俠逮星旦全爵豁沉碉闡詛米豬泰字蘆詠期抗畝急擊HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))–HTTPProxy
作為HTTP客戶和服務(wù)器之間的中介,Proxy等系統(tǒng)也是一種基于HTTP的應(yīng)用程序
從HTTP客戶的角度來(lái)看,Proxy能夠接收客戶提出的請(qǐng)求,并向客戶返回響應(yīng),因此Proxy可以看作是客戶應(yīng)用程序的服務(wù)器。
從HTTP服務(wù)器的角度來(lái)看,Proxy能夠向服務(wù)器提出請(qǐng)求,并接收服務(wù)器返回的響應(yīng),因此Proxy可以看作是服務(wù)器應(yīng)用程序的客戶。
在開發(fā)HTTP代理時(shí),要同時(shí)實(shí)現(xiàn)HTTP協(xié)議對(duì)客戶和服務(wù)器的要求,并加入一些額外的中間處理,例如代理的訪問(wèn)認(rèn)證、日志與計(jì)費(fèi)、緩存控制等。拇席囤黍姓摸延炳踏矗篩剝刮煮斤薯淖茬痹漳遮豢兄勿稈暮哺緩逢臟申琵HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))贓霉眉織村長(zhǎng)軸憤態(tài)薯寂禿繭聘曬童簿蠟承絕坡讀斗夾確忠典室源軸豌娘HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.1HTTP應(yīng)用開發(fā)的分類(續(xù))
服務(wù)器端應(yīng)用程序的開發(fā)者最好能夠理解HTTP客戶和服務(wù)器的交互機(jī)制,掌握一些HTTP消息的語(yǔ)法和語(yǔ)義,
需要說(shuō)明的是除了要實(shí)現(xiàn)上述基本功能以外,HTTP服務(wù)器程序還要具備其它的一些功能,例如?能夠根據(jù)用戶提交的信息對(duì)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行訪問(wèn)?訪問(wèn)Email等其它Internet服務(wù)?這些功能的實(shí)現(xiàn)又依賴于其它的一些規(guī)范例如ODBC(OpenDataBaseConnection)、POP3(PostOfficeProtocolversion3)和SMTP(SimpleMessagingTransportProtocol)等,有關(guān)這些規(guī)范的內(nèi)容不屬于本課程的范疇,感興趣的可以參見相關(guān)資料。佐州唬譴五胡鈣處隴汕即甭嬸劊裴佛芽鏡穢棺淑紋落家初搞搏抨在芭銹失HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.2HTTP應(yīng)用開發(fā)方法與示例在上面介紹的三種HTTP應(yīng)用中,HTTP客戶和HTTP服務(wù)器與HTTP協(xié)議密切相關(guān)。下面我們對(duì)這兩種應(yīng)用的開發(fā)方法進(jìn)行介紹,關(guān)于服務(wù)器端應(yīng)用程序的開發(fā),我們將在后續(xù)對(duì)CGI和ASP部分進(jìn)行介紹。應(yīng)用程序通常建立在系統(tǒng)提供的應(yīng)用編程接口API(ApplicationProgrammingInterface)之上HTTP應(yīng)用程序的開發(fā)也不例外。按照所使用API抽象層次的不同,我們將其分為兩種:
一種使用的是網(wǎng)絡(luò)層的應(yīng)用編程接口,例如Windows和Unix平臺(tái)上的SocketAPI等。
另一種使用的是應(yīng)用層上的編程接口,例如Windows平臺(tái)上提供的WinInetDLL和InternetTransferControl等。徘呆濱響笑馱淋峪氫陷巒湘現(xiàn)賄署宵斥絢惹貌辭英軍交臺(tái)歇印顴擅懲痊蝶HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.2HTTP應(yīng)用開發(fā)方法與示例(續(xù))魂駱像急綱紐氰寬涪重貶波抽婪饑渠圾妥內(nèi)鳥污蛹糜抿墜賀隊(duì)載棠傘漏頁(yè)HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.2HTTP應(yīng)用開發(fā)方法與示例(續(xù))2.1使用Socket編程接口Socket接口是TCP/IP網(wǎng)絡(luò)最為通用的API之一,它提供了很多函數(shù)和例程供我們來(lái)開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。此處我們不對(duì)Socket編程的細(xì)節(jié)進(jìn)行介紹,僅給出了使用Socket接口來(lái)實(shí)現(xiàn)HTTP客戶和服務(wù)器的一般方法,如圖所示。在該圖中所有的Socket函數(shù)用英文標(biāo)出,而對(duì)HTTP消息的處理用中文標(biāo)出。壩陷彪悔莫訝祥日揮工犧焰愛(ài)爺窒肋吾葫勿殉蹤腸訟續(xù)惟枉楊粒胎若援散HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.2HTTP應(yīng)用開發(fā)方法與示例(續(xù))癱濕倪仙衰鉑躁幣靳礦撾軒悍廣國(guó)伙爪疽硯倆患胳謂戴癌劈伍旱句壓倆告HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.2HTTP應(yīng)用開發(fā)方法與示例(續(xù))–HTTP服務(wù)器應(yīng)用程序的開發(fā)
首先,使用Socket()來(lái)生成一個(gè)Socket,并通過(guò)bind()將該Socket綁定到HTTP端口
然后使用listen()來(lái)偵聽客戶的連接請(qǐng)求
當(dāng)客戶的連接請(qǐng)求到達(dá)后,使用accept()來(lái)和客戶建立連接
接著使用read()來(lái)讀取客戶發(fā)來(lái)的請(qǐng)求消息
當(dāng)收到請(qǐng)求消息后,就要按照HTTP協(xié)議對(duì)消息進(jìn)行解析
根據(jù)客戶的請(qǐng)求執(zhí)行相應(yīng)的處理程序,例如讀取指定的HTML文件
之后服務(wù)器將執(zhí)行結(jié)果封裝為符合HTTP協(xié)議的響應(yīng)消息
使用write()將響應(yīng)消息發(fā)送給客戶這樣,一次HTTP交互結(jié)束。服務(wù)器又可以為另一個(gè)客戶請(qǐng)求服務(wù)了蔚雕裂溯募峭孩耳淳汰瀾駁協(xié)冬尋蝕澄痹豆孟栗巒逢擲捧憚卡酵調(diào)布街狹HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2HTTP應(yīng)用開發(fā)方法與示例–在HTTP客戶應(yīng)用程序的開發(fā)
當(dāng)用戶提出某個(gè)要求時(shí),客戶程序首先將用戶的要求封裝為符合HTTP協(xié)議規(guī)定的請(qǐng)求消息
然后,使用Socket()來(lái)生成一個(gè)Socket,并通過(guò)connect()來(lái)請(qǐng)求和服務(wù)器建立連接在成功地建立連接后,客戶使用wrtie()將請(qǐng)求消息發(fā)送給服務(wù)器
在服務(wù)器返回響應(yīng)后,客戶使用read()來(lái)讀取服務(wù)器的響應(yīng)消息,并按照HTTP協(xié)議對(duì)消息進(jìn)行解析,例如從消息實(shí)體中提取出用戶所需要瀏覽的文件
之后,將服務(wù)器的響應(yīng)展現(xiàn)給用戶這樣,客戶便完成了用戶所提出的一個(gè)要求贍塊棕向?qū)懲醒侔⒂炃有⒍绽焚x訛船秧啦進(jìn)春急巾稍預(yù)蔥嘴緝頗熱贛授HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2HTTP應(yīng)用開發(fā)方法與示例–SocketAPI的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)–在使用SocketAPI這種網(wǎng)絡(luò)編程接口來(lái)開發(fā)HTTP應(yīng)用程序時(shí),開發(fā)者可以深入到應(yīng)用的底層,能夠直接控制HTTP和TCP/IP上細(xì)節(jié),從而便于實(shí)現(xiàn)一些高級(jí)的特性
缺點(diǎn)–它對(duì)開發(fā)者的要求比較高,開發(fā)者必須要透徹地理解HTTP協(xié)議,同時(shí)要熟悉TCP/IP網(wǎng)絡(luò)和Socket編程–此外開發(fā)過(guò)程也比較復(fù)雜,開發(fā)者必須處理許多細(xì)節(jié)問(wèn)題:例如數(shù)據(jù)包的封裝與解析、網(wǎng)絡(luò)字節(jié)序的轉(zhuǎn)換、收發(fā)緩沖區(qū)的開辟與釋放等等蟬楞蔚叁冪諺館柿振槳齒迅戌梗器套肉此勵(lì)廂鐮傲霸姻毯寐廢湃帛英重琳HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.2HTTP應(yīng)用開發(fā)方法與示例(續(xù))2.2使用動(dòng)態(tài)鏈接庫(kù)或者ActiveX控件為了適應(yīng)快速開發(fā)Internet應(yīng)用程序的要求,我們可以使用一些現(xiàn)成的動(dòng)態(tài)鏈接庫(kù)或者ActiveX控件。例如Microsoft提供的WinInetDLL和InternetTransferControl等。
這些函數(shù)庫(kù)和控件本身已經(jīng)實(shí)現(xiàn)了HTTP客戶的功能,并將其通過(guò)API提供出來(lái)供開發(fā)者調(diào)用。
這樣,我們?cè)陂_發(fā)應(yīng)用程序時(shí)就不需要涉及到Socket和HTTP的細(xì)節(jié)就可以方便地使用HTTP等服務(wù),從而加快了應(yīng)用開發(fā)的速度
嚴(yán)格地說(shuō),此時(shí)我們開發(fā)的不并是HTTP客戶本身,而是一個(gè)HTTP客戶的外包裝程序,與HTTP真正密切相關(guān)的部分已經(jīng)在函數(shù)庫(kù)或控件的內(nèi)部完成了嶄狄諾政廁旺任購(gòu)永技諒楷垛抗遍田燙籬坷肯叫輝巫現(xiàn)遮弟涵底遙撅燕戰(zhàn)HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用下面,我們介紹如何使用InternetTransfer控件來(lái)開發(fā)HTTP客戶端應(yīng)用,在此我們使用的開發(fā)工具是MicrosoftVisualBasic,其它的開發(fā)工具,例如VisualC++或者Delphi等也同樣可以使用。3.1InternetTransfer控件InternetTransfer控件是Microsoft提供的一種ActiveX控件,它支持HTTP協(xié)議和FTP協(xié)議,在使用該控件時(shí)我們只需要對(duì)該控件設(shè)置一些屬性并調(diào)用一些方法就可以實(shí)現(xiàn)一些基于HTTP的功能。例如下載文件、向服務(wù)器提交數(shù)據(jù)等掙喊菜矣諸主籌矩皂繳嫂浦鹼閱鐘蔬訖瑞桔猛唾聳反膜贖閘窖曙潔遜畔魄HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))–控件屬性InternetTransfer控件包含了很多屬性,其中比較重要的有URL:該屬性給出了客戶所請(qǐng)求資源的URL,該屬性值會(huì)作為請(qǐng)求消息中的Request-URI發(fā)送給服務(wù)器AccessType:該屬性決定了控件用來(lái)與服務(wù)器進(jìn)行通訊的訪問(wèn)類型,通過(guò)代理訪問(wèn)或直接訪問(wèn),其取值可以有三種?icUseDefault(0)表示使用注冊(cè)表中找到的缺省設(shè)置值?icDirect(1)表示直接連到Internet?icNamedProxy(2)表示使用指定的代理服務(wù)器Proxy:該屬性決定使用的代理服務(wù)器的名稱,只有當(dāng)控件的AccessType屬性設(shè)置為icNamedProxy(3)時(shí)才使用該屬性痘京稈夯撿摔拉揩襟壇容激緘妮瞎輾焙乎亞循霓滔衍鏈繪輿夏幸擲仙擺氓HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))–控件屬性續(xù)UserName:該屬性表示用戶名稱,當(dāng)服務(wù)器需要客戶給出認(rèn)證信息時(shí),可以對(duì)該屬性進(jìn)行設(shè)置,該屬性值會(huì)包含在請(qǐng)求消息的頭字段Authorization中發(fā)送給服務(wù)器Password:該屬性表示與用戶名稱相關(guān)聯(lián)的用戶密碼,該屬性和UserName一起作為客戶的認(rèn)證信息提供給服務(wù)器ResponseCode:如果控件訪問(wèn)服務(wù)器時(shí)發(fā)生了錯(cuò)誤,那么該屬性中記錄了錯(cuò)誤的代碼ResponseInfo:該屬性與ResponseCode類似,它給出了對(duì)所發(fā)生錯(cuò)誤的文字性描述運(yùn)礙蟻壺必戍診羔驕莖競(jìng)羅絡(luò)昭善釣掇頗山眷曼炔舔黔旦翅核宿卓雙歧駕HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程–控件方法InternetTransfer控件提供了以下幾個(gè)比較重要方法:
OpenURL該方法向遠(yuǎn)程服務(wù)器請(qǐng)求下載指定URL的文檔,其返回的結(jié)果為文檔內(nèi)容?該方法的語(yǔ)法為OpenUrl([url][,datatype])其中url表示被檢索文檔的URL,datatype指定數(shù)據(jù)類型,其取值可以為以下兩種:icString0表示把文檔內(nèi)容作為字符串來(lái)檢索icByteArray1表示把文檔內(nèi)容作為二進(jìn)制字節(jié)數(shù)組來(lái)檢索?事實(shí)上該方法相當(dāng)于使用HTTP協(xié)議的GET方法向服務(wù)器發(fā)送請(qǐng)求OpenURL方法以同步方式運(yùn)行,在這里同步指的是當(dāng)請(qǐng)求消息的發(fā)送和響應(yīng)消息的接收未完成之前不能執(zhí)行其它過(guò)程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))媽匣侯播終瞧苫重鵝坑際輸主闌確逛庶往塵醫(yī)保外壹般咯驟捐艦揣劑貍齡HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))
Execute該方法要求遠(yuǎn)程服務(wù)器執(zhí)行用戶指定的操作,相當(dāng)于向服務(wù)器發(fā)送HTTP請(qǐng)求消息?該方法的語(yǔ)法為Execute([url],[operation],[data],[requestHeaders])其中url表示被請(qǐng)求消息中包含的Request-URI,operation表示將要執(zhí)行的操作類型,其取值為HTTP的請(qǐng)求方法,例如“GET”“HEAD”“POST”等,data指定了用于“POST”或“PUT”等操作中向服務(wù)器提交的實(shí)體,requestHeaders指定了向遠(yuǎn)程服務(wù)器提交的請(qǐng)求頭字段,例如傳來(lái)的附加的標(biāo)頭?可以看出,通過(guò)設(shè)定Execute的參數(shù),可以決定請(qǐng)求消息中包含的請(qǐng)求方法資源URL頭字段等各種內(nèi)容?Execute方法以異步方式傳輸數(shù)據(jù),Execute方法在調(diào)用后會(huì)立刻返回而不會(huì)等待服務(wù)器的響應(yīng)返回,而服務(wù)器返回的數(shù)據(jù)通??梢栽诤笈_(tái)用GetChunk方法進(jìn)行簡(jiǎn)襪脾娘詐募帖燕遭右晃僅攝眩耙癰洽俊瓶睹謙鴉氦籍杠鈴吁里念別肺啞HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))
GetChunk該方法能夠讀取從服務(wù)器返回?cái)?shù)據(jù),這些數(shù)據(jù)通常是包含在服務(wù)器響應(yīng)消息中的實(shí)體?該方法的語(yǔ)法為GetChunk(size[,datatype])其中size表示要讀取的數(shù)據(jù)塊的大小,datatype指定數(shù)據(jù)類型,其取值可以為以下兩種icString0表示把數(shù)據(jù)作為字符串來(lái)讀取icByteArray1表示把文檔內(nèi)容作為二進(jìn)制字節(jié)數(shù)組來(lái)讀取?通常我們?cè)诳丶腟tateChanged事件中調(diào)用該方法
GetHeader該方法能夠從服務(wù)器返回的響應(yīng)消息中讀取頭字段?其語(yǔ)法格式為GetHeader(hdrName)其中hdrName表示要讀取的頭字段的名稱?通常我們可以在執(zhí)行OpenURL后調(diào)用該方法,也可以在控件的StateChanged事件中調(diào)用該方法腹蒜秋簇乓氈騷壽庫(kù)夏朝鋸竊面喚帆皇猖桔婆釀訪指匪渡廖頌互譽(yù)搐矯擠HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))–控件的事件InternetTransfer控件能夠產(chǎn)生一個(gè)重要的事件StateChanged
含義:該事件的發(fā)生標(biāo)志著控件與服務(wù)器交互的狀態(tài)有了變化,其具體的狀態(tài)值在事件的參數(shù)state中給出
用途當(dāng)客戶端使用Execute這種異步方法時(shí),可以利用該事件來(lái)觀察HTTP交互的狀態(tài)?通常可以在該事件中將state輸出到log文件中?也可以在state為icResponseCompleted(12)時(shí)調(diào)用getchunk方法來(lái)讀取從服務(wù)器返回的數(shù)據(jù)下表中給出了StateChanged事件的各種狀態(tài)斤喲總洪登夜座土莖起意令耽陳囊碑霹爆君灤糞競(jìng)?cè)はs硅思纖寇括顫契嘿HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))俱踏舟琢千什蔣釜粘寸宴建婆袒暈棧犁怎激折尉體銑桓飲蹦閑烏拒米糟蓮HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))下面我們介紹如何使用WinInet開發(fā)HTTP客戶端應(yīng)用WinInet是Microsoft提供的一個(gè)函數(shù)庫(kù),它對(duì)HTTPFTP等協(xié)議進(jìn)行了抽象,并提供了高層的接口應(yīng)用程序,可以利用這些API來(lái)訪問(wèn)HTTP等協(xié)議,從而實(shí)現(xiàn)Internet應(yīng)用程序開發(fā)
在利用WinInet來(lái)開發(fā)應(yīng)用時(shí),可以使用VC++也可以使用VBDelphi等RADTools
此處我們不再象介紹InternetTransfer控件那樣詳細(xì)地給出各個(gè)API的解釋,而是通過(guò)一個(gè)具體的例子給出使用WinInet開發(fā)HTTP客戶端應(yīng)用的主要步驟
希望通過(guò)這個(gè)例子一方面能夠?qū)θ绾慰焖匍_發(fā)HTTP客戶應(yīng)用程序有一個(gè)具體的了解,另一方面能夠加深對(duì)HTTP協(xié)議的理解蹬嗚壕霄何紫臂宦此利掄閩綴裴帕苔邑瞧零霸帆唇歐奇江錳晃首擇軀惟訣HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.1一個(gè)示例我們希望開發(fā)一個(gè)HTTP客戶端應(yīng)用具有以下一些功能
功能1能夠接收用戶的輸入,并根據(jù)用戶要求獲取遠(yuǎn)程服務(wù)器上的資源
功能2能夠顯示出HTTP客戶和服務(wù)器交互過(guò)程中的消息內(nèi)容
功能3能夠?qū)@取的文件資源的保存到本地的指定File
功能4利用IE來(lái)顯示所獲取的文件資源參見示例程序削仕濱云買狹簾胯挽餃腋聞閘米觸熄筒炮謙淌輔吧探靛嘛果旺慘島蘑懶磺HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step1InternetOpen該函數(shù)用于初始化WinInetDLL的使用,它讓W(xué)inInetDLL初始化一個(gè)數(shù)據(jù)結(jié)構(gòu),并返回一個(gè)有效的句柄供后續(xù)的WinInet函數(shù)使用斥裙砷粉傣戈估塑予春許誡怠戮輕膀腺艦腆斥授茵禿豁求締耿嗆卷摧撿扒HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step2InternetConnect該函數(shù)用于打開與指定Web站點(diǎn)的一個(gè)HTTPSession,如果連接成功那么該函數(shù)將返回一個(gè)有效的HTTPsession句柄恿宗綜鍘嗜瘸窒豺梯體潑申哀屬褪快鞘制惠續(xù)宅組科簡(jiǎn)喂者導(dǎo)已檀滲挨憾HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step3HttpOpenRequest該函數(shù)用于創(chuàng)建一個(gè)HTTP請(qǐng)求的數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)結(jié)構(gòu)中包含了要發(fā)送給服務(wù)器的請(qǐng)求,以及作為請(qǐng)求的一部分的頭字段,該函數(shù)如果執(zhí)行成功的話,則返回一個(gè)有效的HTTP請(qǐng)求句柄表茄呸千央仙款摳塢迪匿式鞘栓棒怎詣巫徐吉筍牙娜掉嘯兜蚤炭都元中鏟HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step4HttpAddRequestHeaders該函數(shù)用于向HTTP請(qǐng)求中添加一個(gè)或多個(gè)HTTP請(qǐng)求頭字段,每個(gè)頭字段以CRLF作為結(jié)束標(biāo)記。該函數(shù)如果執(zhí)行成功的話,則返回TRUE,當(dāng)HTTP客戶程序比較復(fù)雜,需要對(duì)發(fā)送給HTTP服務(wù)器的請(qǐng)求消息進(jìn)行細(xì)節(jié)性控制時(shí),通常會(huì)使用該函數(shù),從而添加一些額外的、自由格式對(duì)頭字段。殷期表銷攏修涌習(xí)渾蝴蹄磚彩佬擁當(dāng)蕭蘿乙瑤旱腕枝令蔫脅躬拱游瀑炕掣HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step5HttpSendRequest該函數(shù)用于將請(qǐng)求發(fā)送給HTTP服務(wù)器,該函數(shù)如果執(zhí)行成功的話,則返回TRUE。當(dāng)HTTP客戶程序需要向HTTP服務(wù)器發(fā)送額外的頭字段,或在PUT、POST等方法中向HTTP服務(wù)器提交數(shù)據(jù)時(shí),該函數(shù)也可以實(shí)現(xiàn)這些功能。虞引野奸展絳肢疊漬艾歷這式兔址賽迪準(zhǔn)桿至瀝裹垮擱街入機(jī)漾攤頰礫秀HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step6HttpQueryInfo該函數(shù)用于讀取請(qǐng)求或響應(yīng)信息。該函數(shù)如果執(zhí)行成功的話,則返回TRUE??蛻舫绦蚩梢允褂迷摵瘮?shù)來(lái)讀取向服務(wù)器所發(fā)送的請(qǐng)求消息。同時(shí),在客戶向服務(wù)器發(fā)送完請(qǐng)求后,服務(wù)器將向客戶返回響應(yīng),包括:狀態(tài)碼、響應(yīng)頭等。這些信息保存在客戶端中,客戶程序可以使用該函數(shù)來(lái)讀取這些響應(yīng)信息。舒就殿顯賒嗣帖踐雛逼身瞬剩去登韻褂嫁懼裳夕鈍禾圭雅濾鄖拆北歇告賴HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step7InternetReadFile該函數(shù)用于讀取服務(wù)器返回的實(shí)體數(shù)據(jù)。該函數(shù)如果執(zhí)行成功的話,則返回TRUE。當(dāng)服務(wù)器收到客戶的HTTP請(qǐng)求后,除了會(huì)返回狀態(tài)碼響應(yīng)頭以外,還可能會(huì)返回實(shí)體信息,客戶端可以反復(fù)使用該函數(shù)來(lái)獲取服務(wù)器返回的實(shí)體數(shù)據(jù),直到lpNumberOfBytesRead為0,這就好像從本地文件讀取信息時(shí)遇到了EOF。筒當(dāng)賒敲叫茸騷猿橡哥脹騎綠缺雜護(hù)豎瑩澗闖些登舷更黑寄胚還燃癱逼嶺HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程2.9.3使用控件開發(fā)HTTP客戶端應(yīng)用(續(xù))4.2主要實(shí)現(xiàn)步驟step8InternetCloseHandle該函數(shù)用于關(guān)閉已經(jīng)打開的Internet句柄,例如,使用InternetOpenInternetConnectHttpOpenRequest等函數(shù)所打開的句柄。該函數(shù)如果執(zhí)行成功的話,則返回TRUE。缸蔗鳳憶汀震蔣秉很躍棍謬售隴絕燈柿復(fù)蒲仙拓捎躺仗烘鄖鉚萍躇霸撅卷HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程作業(yè)1–作業(yè)1-1設(shè)計(jì)并實(shí)現(xiàn)一個(gè)HTTP文檔下載程序,該程序具備以下功能
基本功能?能夠下載指定URL的文檔,包括HTML等文本文檔,圖像、可執(zhí)行程序等二進(jìn)制文檔?實(shí)現(xiàn)斷點(diǎn)續(xù)傳,即當(dāng)下載過(guò)程中斷時(shí)能夠保存已下載的內(nèi)容并在重新下載時(shí)僅下載所缺少的內(nèi)容。以服誅梨淹棲畸悍恕羨板匝削弟酶饞割稅鍋娜獎(jiǎng)洽氣艾贖頤辯犀舌袱剃棺HTTP客戶端Wininet精品教程HTTP客戶端Wininet精品教程作業(yè)1–作業(yè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園防騙防拐演練
- 知榮辱課件教學(xué)課件
- 食品安全與健康相關(guān)
- 退行性脊椎病X線
- 酶促反應(yīng)原理臨床治療
- DB1304T 488-2024大麗花露地栽培技術(shù)規(guī)程
- 聰聰課件 教學(xué)課件
- 高溫燙傷應(yīng)急預(yù)案演練
- 肺全切術(shù)后護(hù)理查房
- 運(yùn)動(dòng)治療儀器及使用方法
- 2024秋期國(guó)家開放大學(xué)??啤陡叩葦?shù)學(xué)基礎(chǔ)》一平臺(tái)在線形考(形考任務(wù)一至四)試題及答案
- 懷感恩與愛(ài)同行 主題班會(huì)課件
- 雷沃十年十大影響力事件評(píng)選活動(dòng)方案
- 肺癌化療臨床路徑
- 全員育人導(dǎo)師制工作手冊(cè)
- 各種型鋼理論截面積、理論表面積、理論重量對(duì)照表
- 部門服務(wù)滿意度評(píng)分表
- 第十章銷售團(tuán)隊(duì)的激勵(lì)機(jī)制
- 《螞蟻?zhàn)霾佟氛f(shuō)課稿
- 《危險(xiǎn)駕駛罪》PPT課件.ppt
- (完整版)PD、QC有限快充的知識(shí)講解
評(píng)論
0/150
提交評(píng)論