Microsoft Windows HTTP服務(wù)(WinHTTP)公開了一組C / C ++函數(shù),使您的應(yīng)用程序能夠訪問(wèn)Web上的HTTP資源。 本主題概述了如何使用這些函數(shù)與HTTP服務(wù)器交互。
下圖顯示了與HTTP服務(wù)器交互時(shí)通常調(diào)用WinHTTP函數(shù)的順序。 陰影框表示生成HINTERNET句柄的函數(shù),而平面框表示使用這些句柄的函數(shù)。

在與服務(wù)器交互之前,WinHTTP必須通過(guò)調(diào)用WinHttpOpen進(jìn)行初始化。 WinHttpOpen創(chuàng)建會(huì)話上下文以維護(hù)有關(guān)HTTP會(huì)話的詳細(xì)信息,并返回會(huì)話句柄。使用此句柄,WinHttpConnect功能然后能夠指定目標(biāo)HTTP或安全超文本傳輸??協(xié)議(HTTPS)服務(wù)器。
注意: 對(duì)特定資源發(fā)出請(qǐng)求之前,對(duì)WinHttpConnect的調(diào)用不會(huì)導(dǎo)致與HTTP服務(wù)器的實(shí)際連接。
WinHttpOpenRequest函數(shù)打開特定資源的HTTP請(qǐng)求,并返回一個(gè)可以被其他HTTP函數(shù)使用的HINTERNET句柄。 WinHttpOpenRequest在調(diào)用時(shí)不會(huì)將請(qǐng)求發(fā)送到服務(wù)器。 WinHttpSendRequest函數(shù)實(shí)際上通過(guò)網(wǎng)絡(luò)建立連接并發(fā)送請(qǐng)求。
以下示例顯示了使用默認(rèn)選項(xiàng)調(diào)用WinHttpOpenRequest的示例。
WinHttpAddRequestHeaders函數(shù)允許應(yīng)用程序?qū)⒏郊拥淖杂筛袷秸?qǐng)求頭附加到HTTP請(qǐng)求句柄。它適用于需要精確控制發(fā)送到HTTP服務(wù)器的請(qǐng)求的復(fù)雜應(yīng)用程序。
WinHttpAddRequestHeaders函數(shù)需要一個(gè)由WinHttpOpenRequest創(chuàng)建的HTTP請(qǐng)求句柄,該字符串包含頭部,頭部的長(zhǎng)度和任何修飾符。
以下修飾符可以與WinHttpAddRequestHeaders一起使用。
| Modifier | Description |
|---|---|
WINHTTP_ADDREQ_FLAG_ADD | 添加標(biāo)題(如果它不存在)。與WINHTTP_ADDREQ_FLAG_REPLACE一起使用。 |
WINHTTP_ADDREQ_FLAG_ADD_IF_NEW | 只有當(dāng)頭不存在時(shí)才添加頭;否則返回錯(cuò)誤。 |
WINHTTP_ADDREQ_FLAG_COALESCE | 合并同名的標(biāo)題。 |
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA | 使用逗號(hào)合并同名的標(biāo)題。例如,用此標(biāo)志添加“Accept:text / ”后跟“Accept:audio / ”形成單個(gè)標(biāo)題“Accept:text / ,audio / ”,導(dǎo)致找到的第一個(gè)標(biāo)題合并。它取決于調(diào)用應(yīng)用程序以確保關(guān)于合并/單獨(dú)頭部的粘性方案。 |
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON | 使用分號(hào)合并同名的標(biāo)題。 |
WINHTTP_ADDREQ_FLAG_REPLACE | 替換或刪除標(biāo)頭。如果標(biāo)頭值為空,并且找到標(biāo)頭,則將其刪除。如果標(biāo)頭值不為空,則替換標(biāo)頭值。 |
WinHttpSendRequest函數(shù)建立與服務(wù)器的連接,并將請(qǐng)求發(fā)送到指定的站點(diǎn)。此函數(shù)需要一個(gè)由WinHttpOpenRequest創(chuàng)建的HINTERNET句柄。 WinHttpSendRequest也可以發(fā)送附加頭或可選信息。可選信息通常用于向服務(wù)器寫入信息的操作,例如PUT和POST。 在WinHttpSendRequest函數(shù)發(fā)送請(qǐng)求后,應(yīng)用程序可以使用HINTERNET句柄上的WinHttPReadData和WinHttpQueryDataAvailable函數(shù)下載服務(wù)器的資源。
要將數(shù)據(jù)發(fā)布到服務(wù)器,調(diào)用WinHttpOpenRequest中的HTTP動(dòng)詞必須是POST或PUT。當(dāng)調(diào)用WinHttpSendRequest時(shí),dwTotalLength參數(shù)應(yīng)設(shè)置為以字節(jié)為單位的數(shù)據(jù)大小。然后使用WinHttpWriteData將數(shù)據(jù)發(fā)布到服務(wù)器。 或者,將WinHttpSendRequest的lpOptional參數(shù)設(shè)置為包含要發(fā)布到服務(wù)器的數(shù)據(jù)的緩沖區(qū)的地址。使用此技術(shù)時(shí),必須將WinHttpSendRequest的dwOptionalLength和dwTotalLength參數(shù)設(shè)置為要發(fā)布的數(shù)據(jù)的大小。以這種方式調(diào)用WinHttpSendRequest消除了調(diào)用WinHttpWriteData的需要。
WinHttpQueryHeaders函數(shù)允許應(yīng)用程序檢索有關(guān)HTTP請(qǐng)求的信息。該函數(shù)需要由WinHttpOpenRequest創(chuàng)建的HINTERNET句柄,信息級(jí)別值和緩沖區(qū)長(zhǎng)度。 WinHttpQueryHeaders也接受一個(gè)存儲(chǔ)信息的緩沖區(qū)和一個(gè)基于零的頭索引,枚舉多個(gè)同名的頭。 使用在查詢信息標(biāo)志頁(yè)面上找到的任何信息級(jí)別值以及一個(gè)修飾符來(lái)控制信息存儲(chǔ)在WinHttpQueryHeaders的lpvBuffer參數(shù)中的格式。
在使用WinHttpOpenRequest函數(shù)打開請(qǐng)求后,使用WinHttpSendRequest將其發(fā)送到服務(wù)器,并準(zhǔn)備請(qǐng)求句柄以接收具有WinHttpReceiveResponse的響應(yīng),應(yīng)用程序可以使用WinHttpReadData和WinHttpQueryDataAvailable函數(shù)從HTTP服務(wù)器下載資源。
以下示例代碼顯示如何使用安全事務(wù)語(yǔ)義下載資源。示例代碼初始化WinHTTP應(yīng)用程序編程接口(API),選擇目標(biāo)HTTPS服務(wù)器,然后打開并發(fā)送此安全資源的請(qǐng)求。 WinHttpQueryDataAvailable與請(qǐng)求句柄一起使用,以確定有多少數(shù)據(jù)可供下載,然后WinHttpReadData用于讀取該數(shù)據(jù)。重復(fù)該過(guò)程,直到整個(gè)文檔被檢索和顯示。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注