日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

WinHTTP教程

發(fā)布時間:2023/12/19 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 WinHTTP教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近有些忙,也沒更新BLOG,這幾天在搗鼓一個小玩意要用到WinHTTP API,發(fā)現(xiàn)資料很少,而且大都是些MFC封裝的例子,看得我是一個頭幾個大。就把自己關(guān)于WinHTTP的學(xué)習(xí)總結(jié)了一下,僅供參考,各人理解可能有區(qū)別。另外非常感謝前人在網(wǎng)絡(luò)上提供的相關(guān)參考。

BTW:Google Chrome就是基于WinHTTP寫的,如果想深入學(xué)習(xí),可以閱讀分析Chrome Code.
從此處獲取Chrome的源代碼等相關(guān)信息
SVN: http://src.chromium.org/svn/trunk/src/chrome/
VIEW: http://src.chromium.org/viewvc/

WinHTTP APIs是一組用來進行HTTP操作的函數(shù),相比WinINet更加安全和健壯一些。

WinHTTP API List:

WinHttpAddRequestHeaders
WinHttpCheckPlatform
WinHttpCloseHandle
WinHttpConnect
WinHttpCrackUrl
WinHttpCreateUrl
WinHttpDetectAutoProxyConfigUrl
WinHttpGetDefaultProxyConfiguration
WinHttpGetIEProxyConfigForCurrentUser
WinHttpGetProxyForUrl
WinHttpOpen
WinHttpOpenRequest
WinHttpQueryAuthSchemes
WinHttpQueryDataAvailable
WinHttpQueryHeaders
WinHttpQueryOption
WinHttpReadData
WinHttpReceiveResponse
WinHttpSendRequest
WinHttpSetCredentials
WinHttpSetDefaultProxyConfiguration
WinHttpSetOption
WinHttpSetStatusCallback
WinHttpSetTimeouts
WinHttpTimeFromSystemTime
WinHttpTimeToSystemTime
WinHttpWriteData

WinHTTP API邏輯上分成三個獨立的對象進行建模:會話對象、連接對象、請求對象。大致為:

初始化WinHTTP(獲得會話對象,)–>創(chuàng)建連接(連接1,連接2,…N)–>發(fā)送請求(請求1,請求2,….N)

會話對象、連接對象、請求對象都由HINTERNET句柄表示,句柄的使用傳遞過程大致為:

WinHttpOpen–>return Session handle
|
WinHttpConnect–>return Connection handle
|
WinHttpOpenRequest–>return Request handle

各對象句柄可以使用WinHttpCloseHandle進行關(guān)閉。為了進一步加深了解WinHTTP APIs的調(diào)用過程和關(guān)系,我們來看下面的圖:

(圖來自MSDN)

會話對象
會話對象使用WinHttpOpen函數(shù)來進行創(chuàng)建。函數(shù)原形如下:

HINTERNET WinHttpOpen(
__in LPCWSTR pwszUserAgent,
__in DWORD dwAccessType,
__in LPCWSTR pwszProxyName,
__in LPCWSTR pwszProxyBypass
__in DWORD dwFlags
);

第一個參數(shù)指向一個應(yīng)用程序自身名稱及版本的字符串,使用在HTTP協(xié)議的User Agent中。如:Mozilla/4.0
第二個參數(shù)是WinHttp的訪問類型要求。可能為下列值
WINHTTP_ACCESS_TYPE_NO_PROXY //不使用默認(rèn)代理服務(wù)器
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY //使用默認(rèn)的代理服務(wù)器(儲存在注冊表中的WINHTTP代理設(shè)置,注意:與IE的代理設(shè)置不同,為獨立的)
WINHTTP_ACCESS_TYPE_NAMED_PROXY //使用指定的代理服務(wù)器設(shè)置
第三個參數(shù)指向一個代理服務(wù)器名稱的字符串,如果前一個參數(shù)dwAccessType未設(shè)置為WINHTTP_ACCESS_TYPE_NAMED,這個參數(shù)就必須為WINHTTP_NO_PROXY_NMAE。
第四個參數(shù)指向一個HTTP服務(wù)器列表,其中的服務(wù)器不能通過前一個參數(shù)指定的代理服務(wù)器進行路由(這與IE代理服務(wù)器設(shè)置中的例外情況設(shè)置類似)
第五個參數(shù)定義了一個標(biāo)記,當(dāng)前只定義了一個標(biāo)記
WINHTTP_FLAG_ASYNC //指示W(wǎng)inHTTP API將異步執(zhí)行。

連接對象
連接對象使用WinHttpConnect函數(shù)來進行創(chuàng)建(注意前面提到的一個會話對象可以創(chuàng)建多個連接對象)。函數(shù)原形如下:

HINTERNET WinHttpConnect(
__in HINTERNET hSession,
__in LPCWSTR pswzServerName,
__in INTERNET_PORT nServerPort
__in reserved DWORD dwReserved
);

第一個參數(shù)指定連接的所屬會話句柄。
第二個參數(shù)指定連接的服務(wù)器名稱或IP地址
第三個參數(shù)指定服務(wù)器的端口號,這個參數(shù)還可以指定為下列值
INTERNET_DEFAULT_HTTP_PORT //使用默認(rèn)HTTP Service端口號80
INTERNET_DEFAULT_HTTPS_PORT //使用默認(rèn)HTTPS安全連接端口號443
INTERNET_DEFAULT_PORT //常規(guī)HTTP請求使用80,HTTPS請求使用443(這是個便利的參數(shù)值)
第四個參數(shù)是保留的,必須為0

請求對象
請求對象使用WinHttpOpenRequest函數(shù)來進行創(chuàng)建(注意前面提到的一個連接對象可以創(chuàng)建多個請求對象)。從請求對象開始,就進入原本目的HTTP操作了。函數(shù)原形如下:

HINTERNET WinHttpOpenRequest(
__in HINTERNET hConnect,
__in LPCWSTR pwszVerb,
__in LPCWSTR pwszObjectName,
__in LPCWSTR pwszVersion,
__in LPCWSTR pwszReferrer,
__in LPCWSTR *ppwszAcceptTypes,
__in DWORD dwFlags
)

第一個參數(shù)指定請求所屬的連接句柄
第二個參數(shù)指定HTTP協(xié)議動作(如:GET、POST和HEAD),如果此參數(shù)為NULL,函數(shù)會默認(rèn)使用GET。
第三個參數(shù)指定正在請求的資源名稱和相對路徑
第四個參數(shù)指定使用的HTTP協(xié)議版本,如果此參數(shù)為NULL,函數(shù)會默認(rèn)使用HTTP/1.1
第五個參數(shù)指定引用的URL,如果沒有,可以設(shè)置為WINHTTP_NO_REFERER
第六個參數(shù)指定客戶端(本應(yīng)用程序)將接受的媒體類型(如:image/gif、text/*、*/*),一般可以指定為WIN_HTTP_DEFAULT_ACCEPT_TYPES。
第七個參數(shù)指定請求行為標(biāo)記,如可以指定為WINHTTP_FLAG_SECURE標(biāo)記發(fā)出HTTPS請求,一般可以為0。其他可指定值請參考MSDN,我就不羅列了。

至此介紹了三個WinHTTP API,經(jīng)過這個過程就基本建立了一個HTTP網(wǎng)絡(luò)連接。由此我們已經(jīng)對WInHTTP有了基本概念性的認(rèn)識。WinHTTP APIs(2)中將再介紹利用WinHTTP API進行更為復(fù)雜的操作和實際的應(yīng)用例子

總結(jié)

以上是生活随笔為你收集整理的WinHTTP教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。