WINHTTP的API接口说明
BOOL WINAPI WinHttpAddRequestHeaders(
_In_ HINTERNET hRequest,
_In_ LPCWSTR pwszHeaders,
_In_ DWORD dwHeadersLength,
_In_ DWORD dwModifiers
);
作用:加入一個(gè)HTTP的請(qǐng)求頭域。
參數(shù)說明:
hRequest [in]
一個(gè)HINTERNET句柄通過調(diào)用WinHttpOpenRequest返回。
pwszHeaders [in]
請(qǐng)求的頭域字符串,每一個(gè)頭域(多個(gè)頭域以)使用回車換行(
)結(jié)束
dwHeadersLength [in]
無符號(hào)長(zhǎng)整型變量,指向pwszHeaders的長(zhǎng)度,假設(shè)該參數(shù)為(ulong)-1L時(shí),自己主動(dòng)以"/0"結(jié)束來計(jì)算pwszHeaders的長(zhǎng)度。
dwModifiers [in]
頭域的改動(dòng)模式。
包含例如以下值:
WINHTTP_ADDREQ_FLAG_ADD加入一個(gè)頭域,假設(shè)頭域存在時(shí)值將被新加入的值替換。與WINHTTP_ADDREQ_FLAG_REPLAC一起使用
WINHTTP_ADDREQ_FLAG_ADD_IF_NEW加入一個(gè)不存在頭域,假設(shè)該頭域存在則返回一個(gè)錯(cuò)誤。
WINHTTP_ADDREQ_FLAG_COALESCE將同名的頭域進(jìn)行合并。
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA合并同名的頭域,值使用逗號(hào)隔開。
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON合并同名的頭域,值使用分號(hào)隔開。
WINHTTP_ADDREQ_FLAG_REPLACE替換和刪除一個(gè)頭域。假設(shè)值為空。則刪除,否則被替換。
返回值為假時(shí),使用getlasterror來得到錯(cuò)誤信息。
err code:
ERROR_WINHTTP_INCORRECT_HANDLE_STATE請(qǐng)求不能被運(yùn)行,由于句柄的狀態(tài)不對(duì)
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE請(qǐng)求的句柄類型不對(duì)
ERROR_WINHTTP_INTERNAL_ERROR內(nèi)部錯(cuò)誤
ERROR_NOT_ENOUGH_MEMORY沒有足夠的內(nèi)存來完畢操作。
BOOL WinHttpCheckPlatform(void);
作用:推斷是否是微軟支持的平臺(tái)。
返回值:TRUE支持,否則不支持。
BOOL WINAPI WinHttpCloseHandle(
_In_ HINTERNET hInternet
);
作用:關(guān)閉一個(gè)HINTERNET句柄。
參考:
hInternet [in]
待關(guān)閉HINTERNET的句柄。
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_WINHTTP_SHUTDOWNwinhttp已關(guān)閉或卸載
ERROR_WINHTTP_INTERNAL_ERRORINTERNAL錯(cuò)誤
ERROR_NOT_ENOUGH_MEMORY內(nèi)存不夠
HINTERNET WINAPI WinHttpConnect(
_In_ HINTERNET hSession,
_In_ LPCWSTR pswzServerName,
_In_ INTERNET_PORT nServerPort,
_Reserved_ DWORD dwReserved
);
作用:建立一個(gè)http的連接會(huì)話。
參數(shù):
hSession [in]
通過調(diào)用winHttpOpen返回的session句柄。
pswzServerName [in]
主機(jī)或域名。
能夠有IP地址也能夠是網(wǎng)站域名。
nServerPort [in]
主機(jī)的port;
取值:
INTERNET_DEFAULT_HTTP_PORT默認(rèn)的HTTPport80。
INTERNET_DEFAULT_HTTPS_PORT默認(rèn)的HTTPSport443。能夠通過調(diào)用WinHttpOpenRequest函數(shù)中的WINHTTP_FLAG_SECURE 開啟HTTPS
INTERNET_DEFAULT_PORT默認(rèn)HTTP為80。HTTPS為443
dwReserved [in]
保留參數(shù),設(shè)置為0;
返回值:假設(shè)調(diào)用成功則返回一個(gè)HTTP連接會(huì)話的句柄,否則為NULL。為NULL時(shí)能夠調(diào)用getlasterror查看。
err code:
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE句柄的類型不對(duì)。
ERROR_WINHTTP_INTERNAL_ERRORINTERNAL錯(cuò)誤。
ERROR_WINHTTP_INVALID_URL無效的URL
ERROR_WINHTTP_OPERATION_CANCELLED操作被取消。通經(jīng)常使用于操作完畢前。
ERROR_WINHTTP_UNRECOGNIZED_SCHEMEURL不能被識(shí)別或不支持。
ERROR_WINHTTP_SHUTDOWNwinhttp已關(guān)閉或卸載
ERROR_NOT_ENOUGH_MEMORY內(nèi)存不夠
BOOL WINAPI WinHttpCrackUrl(
_In_ LPCWSTR pwszUrl,
_In_ DWORD dwUrlLength,
_In_ DWORD dwFlags,
_Inout_ LPURL_COMPONENTS lpUrlComponents
);
作用:分離host和路徑
參數(shù):
pwszUrl [in]
將正確規(guī)范的URL進(jìn)行分離。但不正確URL做有效性驗(yàn)證。
dwUrlLength [in]
pwszUrl的長(zhǎng)度,假設(shè)設(shè)為0,則默認(rèn)pwszUrl字符以NULL結(jié)束來計(jì)算長(zhǎng)度。
dwFlags [in]
操作標(biāo)識(shí)。可取值:
ICU_DECODE字符轉(zhuǎn)換,但不解編碼,如UTF-8。
假設(shè)使用。能夠通過傳入U(xiǎn)RL_COMPONENTS結(jié)構(gòu)。
ICU_ESCAPE忽略字符轉(zhuǎn)議,相同能夠傳入U(xiǎn)RL_COMPONENTS結(jié)構(gòu)進(jìn)行設(shè)置。
ICU_REJECT_USERPWD拒絕的URL輸入包括username,password。或兩者。假設(shè)函數(shù)失敗,由于一個(gè)無效的URL。隨后調(diào)用GetLastError函數(shù)將返回ERROR_WINHTTP_INVALID_URL的。
lpUrlComponents [in, out]
指向URL_COMPONENTS 結(jié)構(gòu)的指針
返回值:
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_WINHTTP_INVALID_URL
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
ERROR_NOT_ENOUGH_MEMORY
DWORD WinHttpCreateProxyResolver(
_In_ HINTERNET hSession,
_Out_ HINTERNET *phResolver
);
作用:創(chuàng)建代理解釋器
參數(shù):
hSession [in]
成功調(diào)用WinHttpOpen返回的句柄。該句柄必須打開WINHTTP_FLAG_ASYNC標(biāo)識(shí)。
phResolver [out]
通過調(diào)用WinHttpGetProxyForUrlEx返回的一個(gè)新句柄。當(dāng)完畢或取消時(shí)可調(diào)用WinHttpCloseHandle來關(guān)閉。
返回值:返回操作的狀態(tài)
ERROR_SUCCESS操作成功
ERROR_INVALID_HANDLEhSession 為NULL
ERROR_WINHTTP_INCORRECT_HANDLE_TYPEhSession 不是調(diào)用 WinHttpOpen 返回或 hSession 沒有開啟異步標(biāo)識(shí) WINHTTP_FLAG_ASYNC
BOOL WINAPI WinHttpCreateUrl(
_In_ LPURL_COMPONENTS lpUrlComponents,
_In_ DWORD dwFlags,
_Out_ LPWSTR pwszUrl,
_Inout_ LPDWORD lpdwUrlLength
);
作用:創(chuàng)建一個(gè)URL。
參數(shù):
lpUrlComponents [in]
指向一個(gè)包括要?jiǎng)?chuàng)建的URL的 URL_COMPONENTS 結(jié)構(gòu)體指針
dwFlags [in]
操作模式,取值:
ICU_ESCAPE轉(zhuǎn)換結(jié)構(gòu)體中的lpszUrlPath 和 lpszExtraInfo中的全部不安全的轉(zhuǎn)議字符。
ICU_REJECT_USERPWD拒絕的URL輸入包括username,password。或兩者。假設(shè)函數(shù)失敗。由于一個(gè)無效的URL。隨后調(diào)用GetLastError函數(shù)將返回ERROR_WINHTTP_INVALID_URL的。
pwszUrl [out]
指向一個(gè)寬字節(jié)的字符串。
lpdwUrlLength [in, out]
設(shè)定能夠接收pwszUrl字符的長(zhǎng)度。
返回值:
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpDetectAutoProxyConfigUrl(
_In_ DWORD dwAutoDetectFlags,
_Out_ LPWSTR *ppwszAutoConfigUrl
);
作用:刪除自己主動(dòng)代理配置的URL
參數(shù):
dwAutoDetectFlags [in]
使用本地PAC文件協(xié)議,假設(shè)DHCP和DNS都被檢測(cè)到。則優(yōu)先使用DHCP,假設(shè)PAC URL 使用DHCP檢測(cè)不到再使用DNS。
取值:
WINHTTP_AUTO_DETECT_TYPE_DHCP使用DHCP
WINHTTP_AUTO_DETECT_TYPE_DNS_A使用DNS
ppwszAutoConfigUrl [out]
返回一個(gè)代理數(shù)據(jù)URL的寬字節(jié)字符串,必須調(diào)用 GlobalFree 來釋放該字符串。
返回值:
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_WINHTTP_AUTODETECTION_FAILED返回WinHTTP的代理自己主動(dòng)配置(PAC)文件是無法發(fā)現(xiàn)的URL。
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
VOID WINAPI WinHttpFreeProxyResult(
_Inout_ WINHTTP_PROXY_RESULT *pProxyResult
);
作用:釋放代理
參數(shù):
pProxyResult [in, out]
指向 WINHTTP_PROXY_RESULT 結(jié)構(gòu)的指針。該結(jié)構(gòu)調(diào)用 WinHttpGetProxyResult得到。
BOOL WINAPI WinHttpGetDefaultProxyConfiguration(
_Inout_ WINHTTP_PROXY_INFO *pProxyInfo
);
作用:獲了以默認(rèn)代理配置。
參數(shù):
pProxyInfo [in, out]
指向WINHTTP_PROXY_INFO結(jié)構(gòu)的指針。
返回值:
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser(
_Inout_ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *pProxyConfig
);
作用:得到當(dāng)前用戶的IE代理配置
參數(shù):
pProxyConfig [in, out]
指向WINHTTP_CURRENT_USER_IE_PROXY_CONFIG 結(jié)構(gòu)的指針,作為傳出參數(shù)時(shí)。包含當(dāng)前IE網(wǎng)絡(luò)連接的代理配置信息。如VPN,LAN, 拔號(hào)連接等。
返回值:
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_FILE_NOT_FOUNDIE設(shè)置文件沒有發(fā)現(xiàn)。
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpGetProxyForUrl(
_In_ HINTERNET hSession,
_In_ LPCWSTR lpcwszUrl,
_In_ WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions,
_Out_ WINHTTP_PROXY_INFO *pProxyInfo
);
作用:通過URL得到代理信息。
參數(shù):
hSession [in]
通過調(diào)用WinHttpOpen函數(shù)返回的hSession句柄。
lpcwszUrl [in]
寬字節(jié)的URL
pAutoProxyOptions [in]
指向使用自己主動(dòng)代理選項(xiàng)的WINHTTP_AUTOPROXY_OPTIONS 結(jié)構(gòu)體指針。
pProxyInfo [out]
指向 WINHTTP_PROXY_INFO 結(jié)構(gòu)的指針。 這信結(jié)構(gòu)體將應(yīng)用到WINHTTP_OPTION_PROXY結(jié)構(gòu)中的option項(xiàng)。
釋放結(jié)構(gòu)中的lpszProxy和lpszProxyBypass字符串。使用 GlobalFree 函數(shù)。
返回值:
當(dāng)返回false時(shí)能夠調(diào)用getlasterror來得到相關(guān)信息。
err code:
ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERRORURL無法指定代理,找不到代理server錯(cuò)誤。
ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT在自己主動(dòng)代理配置文件里出錯(cuò)PAC文件。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE句柄類型不對(duì)。
ERROR_WINHTTP_INTERNAL_ERROR網(wǎng)絡(luò)異常。
ERROR_WINHTTP_INVALID_URLURL無效。
ERROR_WINHTTP_LOGIN_FAILURE登錄嘗試失敗。當(dāng)遇到此錯(cuò)誤時(shí),關(guān)閉請(qǐng)求句柄調(diào)用WinHttpCloseHandle。
必須創(chuàng)建一個(gè)新的請(qǐng)求進(jìn)行重試。
ERROR_WINHTTP_OPERATION_CANCELLED操作被取消
ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT找不到PAC文件或返回404 not found。
ERROR_WINHTTP_UNRECOGNIZED_SCHEMEPAC文件指定的URL不是http或https開頭的請(qǐng)求
ERROR_NOT_ENOUGH_MEMORY內(nèi)存不夠
DWORD WinHttpGetProxyForUrlEx(
_In_ HINTERNET hResolver,
_In_ PCWSTR pcwszUrl,
_In_ WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions,
_In_ DWORD_PTR pContext
);
作用:通過URL獲代替理信息。
參數(shù):
hResolver [in]
通過調(diào)用WinHttpCreateProxyResolver函數(shù)返回的句柄。
pcwszUrl [in]
unicode URL字符串。
pAutoProxyOptions [in]
指向使用自己主動(dòng)代理選項(xiàng)的WINHTTP_AUTOPROXY_OPTIONS結(jié)構(gòu)體指針。
pContext [in]
上下文數(shù)據(jù)將被回調(diào)函數(shù)進(jìn)行回調(diào)。
返回值:返回操作結(jié)果的狀態(tài)值。
取值:
ERROR_IO_PENDING異步操作正在進(jìn)行中。
ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERRORURL定位不到代理server。
ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT自己主動(dòng)代理配置文件出錯(cuò)(PAC)。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE句柄類型不對(duì)。
ERROR_WINHTTP_INVALID_URL無效的URL。
ERROR_WINHTTP_OPERATION_CANCELLED操作被取消。
ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPTURL未搜索到或server返回404 not found。
ERROR_WINHTTP_UNRECOGNIZED_SCHEMEPAC文件指定的URL不是http或https開頭的請(qǐng)求
ERROR_NOT_ENOUGH_MEMORY
DWORD WINAPI WinHttpGetProxyResult(
_In_ HINTERNET hResolver,
_Out_ WINHTTP_PROXY_RESULT *pProxyResult
);
作用:獲代替理結(jié)果。
參數(shù):
hResolver [in]
調(diào)用WinHttpGetProxyForUrlEx函數(shù)返回的句柄。
pProxyResult [out]
指向WINHTTP_PROXY_RESULT的結(jié)構(gòu)體指針。該結(jié)構(gòu)包含內(nèi)調(diào)用WinHttpGetProxyForUrlEx后得到的代理結(jié)果數(shù)據(jù), 這個(gè)結(jié)果數(shù)據(jù)必須調(diào)用WinHttpFreeProxyResult進(jìn)行釋放。
返回值:返回操作結(jié)果的狀態(tài)值。
取值:
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE句柄類型不對(duì)。
ERROR_WINHTTP_INCORRECT_HANDLE_STATE調(diào)用WinHttpGetProxyForUrlEx返回的句柄狀態(tài)不對(duì)。
HINTERNET WINAPI WinHttpOpen(
_In_opt_ LPCWSTR pwszUserAgent,
_In_ DWORD dwAccessType,
_In_ LPCWSTR pwszProxyName,
_In_ LPCWSTR pwszProxyBypass,
_In_ DWORD dwFlags
);
作用:HTTP初始化。
參數(shù):
pwszUserAgent [in, optional]
HTTP協(xié)議中的User-Agent的字符串變量。
dwAccessType [in]
請(qǐng)求類型,取值:
WINHTTP_ACCESS_TYPE_NO_PROXY攻克了全部不使用代理server的主機(jī)名。
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY檢測(cè)靜態(tài)代理或注冊(cè)表配置代理,不繼承和不共享IE的代理設(shè)置。調(diào)用WinHttpSetDefaultProxyConfiguration進(jìn)行設(shè)置。
WINHTTP_ACCESS_TYPE_NAMED_PROXY通過路由列表指定的名稱進(jìn)行代理。
pwszProxyName [in]
當(dāng)dwAccessType設(shè)置為WINHTTP_ACCESS_TYPE_NAMED_PROXY時(shí),必須指定代理名稱,winHttp函數(shù)庫僅僅支持CERN前綴的HTTP代理。
假設(shè)dwAccessType不設(shè)置WINHTTP_ACCESS_TYPE_NAMED_PROXY,則該參數(shù)必須設(shè)置為WINHTTP_NO_PROXY_NAME
pwszProxyBypass [in]
代理的主機(jī)名或IP地址,假設(shè)dwAccessType設(shè)置為WINHTTP_ACCESS_TYPE_NAMED_PROXY不使用路由代理。
能夠使用通配符字串,不要使用空字符串。假設(shè)指定為"<local>"宏作為入口。該功能通過不論什么主機(jī)。
假設(shè)dwAccessType不設(shè)置為WINHTTP_ACCESS_TYPE_NAMED_PROXY則該參數(shù)值必須為WINHTTP_NO_PROXY_BYPASS。
dwFlags [in]
標(biāo)志值,取值:
WINHTTP_FLAG_ASYNC默認(rèn)情況下是同步請(qǐng)求過程,假設(shè)使用異步請(qǐng)求。須要調(diào)用WinHttpSetStatusCallback來設(shè)定回調(diào)函數(shù)。
返回值:
假設(shè)成功返回一個(gè)session句柄,否則返回NULL。
HINTERNET WINAPI WinHttpOpenRequest(
_In_ HINTERNET hConnect,
_In_ LPCWSTR pwszVerb,
_In_ LPCWSTR pwszObjectName,
_In_ LPCWSTR pwszVersion,
_In_ LPCWSTR pwszReferrer,
_In_ LPCWSTR *ppwszAcceptTypes,
_In_ DWORD dwFlags
);
作用:建立一個(gè)http請(qǐng)求,返回成功請(qǐng)求句柄。
hConnect [in]
通過調(diào)用WinHttpConnect返回的句柄。
pwszVerb [in]
HTTP請(qǐng)求動(dòng)作。如get,post等,假設(shè)設(shè)為NULL。則默覺得GET請(qǐng)求。
pwszObjectName [in]
包括指定的HTTP請(qǐng)求的目標(biāo)資源的名稱。這一般是一個(gè)文件名稱,可運(yùn)行模塊,或搜索符。
pwszVersion [in]
HTTP的版本號(hào),假設(shè)為NULL,默覺得 HTTP/1.1.
pwszReferrer [in]
指向一個(gè)字符串,該字符串指定的文件的URL,該URL的要求填寫pwszObjectName。
假設(shè)沒有設(shè)定規(guī)定的文件,這參數(shù)設(shè)置為WINHTTP_NO_REFERER。
ppwszAcceptTypes [in]
設(shè)置為WINHTTP_DEFAULT_ACCEPT_TYPES接收類型,默覺得純文本的圖片和二進(jìn)制,假設(shè)是多媒體數(shù)據(jù)接收。須要進(jìn)行類型指定。請(qǐng)參考:http://www.iana.org/assignments/media-types/
dwFlags [in]
標(biāo)識(shí),取值:
WINHTTP_FLAG_BYPASS_PROXY_CACHE與WINHTTP_FLAG_REFRESH的行為同樣,進(jìn)行刷新。
WINHTTP_FLAG_ESCAPE_DISABLEpwszObjectName中的字符被進(jìn)行轉(zhuǎn)議。
WINHTTP_FLAG_ESCAPE_DISABLE_QUERY查詢pwszObjectName中的字符須要進(jìn)行字符轉(zhuǎn)義。
WINHTTP_FLAG_ESCAPE_PERCENTpwszObjectName中傳遞的字符串從LPCWSTR轉(zhuǎn)換為L(zhǎng)PSTR。全部不安全的字符轉(zhuǎn)換為轉(zhuǎn)義序列,包含百分比符號(hào)。默認(rèn)情況下,全部不安全的百分比符號(hào)之外的字符轉(zhuǎn)換為轉(zhuǎn)義序列。
WINHTTP_FLAG_NULL_CODEPAGEpwszObjectName中的ANSI字符替換為WCHAR字符,不正確轉(zhuǎn)議進(jìn)行檢測(cè)。
WINHTTP_FLAG_REFRESH當(dāng)使用此標(biāo)志時(shí)。一個(gè)“的Pragma:no-cache的”頭加入到請(qǐng)求句柄。
當(dāng)創(chuàng)建一個(gè)HTTP請(qǐng)求頭。一個(gè)“的Cache-Control:no-cache的”也添加了。
WINHTTP_FLAG_SECURE啟用SSL/TLS安全。
返回值:成功返回請(qǐng)求的句柄,否則為NULL。
BOOL WINAPI WinHttpQueryAuthSchemes(
_In_ HINTERNET hRequest,
_Out_ LPDWORD lpdwSupportedSchemes,
_Out_ LPDWORD lpdwFirstScheme,
_Out_ LPDWORD pdwAuthTarget
);
作用:函數(shù)返回的server所支持的授權(quán)方案。
參數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句柄。
lpdwSupportedSchemes [out]
當(dāng)前支持的授權(quán)方式。取值:
WINHTTP_AUTH_SCHEME_BASICBASIC認(rèn)證方式。
WINHTTP_AUTH_SCHEME_NTLMNTLM認(rèn)證方式。
WINHTTP_AUTH_SCHEME_PASSPORTPASSPORT認(rèn)證方式。
WINHTTP_AUTH_SCHEME_DIGESTDIGEST認(rèn)證方式。
WINHTTP_AUTH_SCHEME_NEGOTIATE在NTLM 。 Kerberos之間的認(rèn)證方式。
lpdwFirstScheme [out]
首選授權(quán)方式,取值:
WINHTTP_AUTH_SCHEME_BASICBASIC認(rèn)證方式。
WINHTTP_AUTH_SCHEME_NTLMNTLM認(rèn)證方式。
WINHTTP_AUTH_SCHEME_PASSPORTPASSPORT認(rèn)證方式。
WINHTTP_AUTH_SCHEME_DIGESTDIGEST認(rèn)證方式。
WINHTTP_AUTH_SCHEME_NEGOTIATE在NTLM 。 Kerberos之間的認(rèn)證方式。
pdwAuthTarget [out]
授權(quán)目標(biāo)。取值:
WINHTTP_AUTH_TARGET_SERVERserver授權(quán)。
WINHTTP_AUTH_TARGET_PROXY代理授權(quán)。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpQueryDataAvailable(
_In_ HINTERNET hRequest,
_Out_ LPDWORD lpdwNumberOfBytesAvailable
);
作用:請(qǐng)求返回的數(shù)據(jù)量,以字節(jié)為位進(jìn)行讀取。
參數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句本。
在調(diào)用WinHttpQueryDataAvailable之前,必須先調(diào)用WinHttpReceiveResponse。
lpdwNumberOfBytesAvailable [out]
字節(jié)流數(shù)據(jù)。假設(shè)設(shè)置為異步接收,則這里為NULL,通過回調(diào)函數(shù)進(jìn)行處理。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpQueryHeaders(
_In_ HINTERNET hRequest,
_In_ DWORD dwInfoLevel,
_In_opt_ LPCWSTR pwszName,
_Out_ LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength,
_Inout_ LPDWORD lpdwIndex
);
作用:HTTP頭域數(shù)據(jù)。
參數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句柄。
在使用WinHttpQueryHeaders前必須等WinHttpReceiveResponse調(diào)用完畢。
dwInfoLevel [in]
類型為DWORD值。指定查詢信息標(biāo)志頁上列出的屬性和修飾符標(biāo)志的組合。這些屬性和修飾符標(biāo)志指示被請(qǐng)求的信息。以及它是怎樣被格式化。
pwszName [in, optional] 可選
頭域名。假設(shè)dwInfoLevel參數(shù)不是WINHTTP_QUERY_CUSTOM,則設(shè)置為WINHTTP_HEADER_NAME_BY_INDEX。
lpBuffer [out]
接收該信息的緩沖區(qū)的指針。
將該參數(shù)設(shè)置為WINHTTP_NO_OUTPUT_BUFFER導(dǎo)致該函數(shù)返回FALSE。
調(diào)用GetLastError,然后返回ERROR_INSUFFICIENT_BUFFER和lpdwBufferLength包括的字節(jié)數(shù)必須持有所要求的信息。
lpdwBufferLength [in, out]
指針類型為DWORD的值指定的數(shù)據(jù)緩沖區(qū)的長(zhǎng)度,以字節(jié)為單位。
當(dāng)函數(shù)返回時(shí),此參數(shù)包括指針的值。指定的信息寫入到緩沖區(qū)的長(zhǎng)度。
當(dāng)函數(shù)返回字符串,以下的規(guī)則適用
1、假設(shè)函數(shù)調(diào)用成功,lpdwBufferLength指定字符串的長(zhǎng)度,以字節(jié)為單位。減去終止空。
2、假設(shè)函數(shù)調(diào)用失敗,則返回ERROR_INSUFFICIENT_BUFFER。lpdwBufferLength指定的字節(jié)數(shù),應(yīng)用程序必須分配給接收字符串。
lpdwIndex [in, out]
指針用于列舉多個(gè)具有同樣名稱的頭一個(gè)從零開始的頭索引。當(dāng)調(diào)用該函數(shù)時(shí),這個(gè)參數(shù)是返回指定的頭的索引。
當(dāng)函數(shù)返回時(shí)。此參數(shù)是該指數(shù)下一個(gè)標(biāo)頭。
假設(shè)無法找到的下一個(gè)索引。則返回ERROR_WINHTTP_HEADER_NOT_FOUND。設(shè)置此參數(shù)WINHTTP_NO_HEADER_INDEX來指定應(yīng)返回的頭,僅僅有第一次出現(xiàn)。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpQueryOption(
_In_ HINTERNET hInternet,
_In_ DWORD dwOption,
_Out_ LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength
);
作用:查詢指定的句柄上的“Internet選項(xiàng)”。
參數(shù):
hInternet [in]
HINTERNET句柄上查詢信息。注意,這可能是一個(gè)會(huì)話句柄或請(qǐng)求句柄。這取決于正在查詢的選項(xiàng),選項(xiàng)標(biāo)志主題,以確定該句柄是適當(dāng)?shù)氖褂弥胁樵兲囟ǖ倪x項(xiàng)。
dwOption [in]
無符號(hào)長(zhǎng)整型值,包括的“Internet選項(xiàng)”查詢。
lpBuffer [out]
接收選項(xiàng)設(shè)置的緩沖區(qū)的指針。
返回的字符串的WinHttpQueryOption功能在全球范圍內(nèi)分配的,所以當(dāng)它完畢了使用它的調(diào)用應(yīng)用程序必須在全球范圍釋放該字符串。
將該參數(shù)設(shè)置為NULL,此函數(shù)返回FALSE。
調(diào)用GetLastError,然后返回ERROR_INSUFFICIENT_BUFFER和lpdwBufferLength包括的字節(jié)數(shù)必須持有所要求的信息。
lpdwBufferLength [in, out]
指針指向一個(gè)無符號(hào)長(zhǎng)整型變量,它包括lpBuffer的長(zhǎng)度,以字節(jié)為單位。在函數(shù)返回時(shí)。該變量接收的數(shù)據(jù)放入lpBuffer的長(zhǎng)度。
假設(shè)GetLastError返回ERROR_INSUFFICIENT_BUFFER的,這個(gè)參數(shù)接收的字節(jié)數(shù)必須持有所要求的信息。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpReadData(
_In_ HINTERNET hRequest,
_Out_ LPVOID lpBuffer,
_In_ DWORD dwNumberOfBytesToRead,
_Out_ LPDWORD lpdwNumberOfBytesRead
);
作用:讀取返回的數(shù)據(jù)。
能數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句柄。
在調(diào)用該函數(shù)之前,必須先調(diào)用 WinHttpOpenRequest和WinHttpReceiveResponse 或者 WinHttpQueryDataAvailable函數(shù)。
lpBuffer [out]
接收數(shù)據(jù)的緩沖區(qū)。
dwNumberOfBytesToRead [in]
緩沖區(qū)大小長(zhǎng)度。
lpdwNumberOfBytesRead [out]
傳出接收的字節(jié)數(shù)。假設(shè)設(shè)置為NULL。則調(diào)用回調(diào)函數(shù)進(jìn)行讀取。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpReceiveResponse(
_In_ HINTERNET hRequest,
_Reserved_ LPVOID lpReserved
);
作用:
參數(shù):
hRequest [in]
通過調(diào)用WinHttpOpenRequest且調(diào)用WinHttpSendRequest返回的句柄 等待WinHttpSendRequest發(fā)送完畢時(shí)調(diào)用WinHttpReceiveResponse。
lpReserved [in]
預(yù)留參數(shù)。設(shè)置為NULL。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_CANNOT_CONNECTserver連接失敗。
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED請(qǐng)求須要進(jìn)行授權(quán)認(rèn)證。
ERROR_WINHTTP_CONNECTION_ERRORserver重置或關(guān)閉或SSL不兼容。
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW調(diào)用 WinHttpReceiveResponse 溢出。
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
ERROR_WINHTTP_INVALID_URL
ERROR_WINHTTP_LOGIN_FAILURE
ERROR_WINHTTP_NAME_NOT_RESOLVED
ERROR_WINHTTP_OPERATION_CANCELLED
ERROR_WINHTTP_REDIRECT_FAILED
ERROR_WINHTTP_RESEND_REQUEST
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
ERROR_WINHTTP_SECURE_FAILURESSL認(rèn)證失敗。
ERROR_WINHTTP_TIMEOUT
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
ERROR_NOT_ENOUGH_MEMORY
DWORD WinHttpResetAutoProxy(
_In_ HINTERNET hSession,
_In_ DWORD dwFlags
);
作用:重置自己主動(dòng)代理
參數(shù):
hSession [in]
調(diào)用WinHttpOpen返回的句柄。
dwFlags [in]
重置標(biāo)志位,取值:
WINHTTP_RESET_SCRIPT_CACHE刷新持久的HTTP緩存的代理腳本。
WINHTTP_WRAPPER_RESET_STATE強(qiáng)制重試網(wǎng)絡(luò)代理信息。
NHTTP_RESET_OUT_OF_PROC須要關(guān)閉使用WinHttpGetProxyForUrl過程中的緩存須要清除HINTERNET句柄。
返回值:
ERROR_SUCCESS重置成功。
ERROR_INVALID_HANDLEhSession句柄無效。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPEhSession不是由WinHttpOpen返回。
BOOL WINAPI WinHttpSendRequest(
_In_ HINTERNET hRequest,
_In_opt_ LPCWSTR pwszHeaders,
_In_ DWORD dwHeadersLength,
_In_opt_ LPVOID lpOptional,
_In_ DWORD dwOptionalLength,
_In_ DWORD dwTotalLength,
_In_ DWORD_PTR dwContext
);
作用:發(fā)送請(qǐng)求數(shù)據(jù)。
參數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句柄。
pwszHeaders [in, optional]
HTTP請(qǐng)求頭域,假設(shè)不須要額外的頭域,能夠設(shè)置為:WINHTTP_NO_ADDITIONAL_HEADERS
dwHeadersLength [in]
頭域的長(zhǎng)度。假設(shè)設(shè)置為-1L則,將以字符"/0"結(jié)束來計(jì)算頭域的長(zhǎng)度。
lpOptional [in, optional]
一個(gè)指針,指向一個(gè)緩沖區(qū)。當(dāng)中包括可選的數(shù)據(jù)發(fā)送后。馬上請(qǐng)求標(biāo)頭。
該參數(shù)通經(jīng)常使用于POST和PUT操作。
可選的數(shù)據(jù)能夠被發(fā)送到server的資源或數(shù)據(jù)。假設(shè)沒有可選的數(shù)據(jù)發(fā)送這參數(shù)能夠是WINHTTP_NO_REQUEST_DATA的。
假設(shè)為0,則參數(shù)被忽略。置為NULL。
緩沖區(qū)的生命周期必須在調(diào)用WinHttpReceiveResponse完畢后進(jìn)行關(guān)閉。
dwOptionalLength [in]
假設(shè)沒有數(shù)據(jù)發(fā)送時(shí)。設(shè)置為0。
假設(shè)lpOptional不為空時(shí),則這個(gè)值必須有意義。否則將被忽略變?yōu)镹ULL。
dwTotalLength [in]
無符號(hào)長(zhǎng)整型值,包括的總發(fā)送的數(shù)據(jù)的長(zhǎng)度,以字節(jié)為單位。此參數(shù)指定Content-Length頭的要求。
假設(shè)這個(gè)參數(shù)的值是大于由dwOptionalLength指定的長(zhǎng)度。然后WinHttpWriteData能夠用于發(fā)送額外的數(shù)據(jù)。
dwContext [in]
一個(gè)指針變量。它包括一個(gè)應(yīng)用程序定義的值傳遞,請(qǐng)求句柄,不論什么回調(diào)函數(shù)的指針。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_CANNOT_CONNECT
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
ERROR_WINHTTP_CONNECTION_ERROR
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_WINHTTP_INVALID_URL
ERROR_WINHTTP_LOGIN_FAILURE
ERROR_WINHTTP_NAME_NOT_RESOLVED
ERROR_WINHTTP_OPERATION_CANCELLED
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
ERROR_WINHTTP_SECURE_FAILURE
ERROR_WINHTTP_SHUTDOWN
ERROR_WINHTTP_TIMEOUT
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
ERROR_NOT_ENOUGH_MEMORY
ERROR_INVALID_PARAMETER
ERROR_WINHTTP_RESEND_REQUEST
BOOL WINAPI WinHttpSetCredentials(
_In_ HINTERNET hRequest,
_In_ DWORD AuthTargets,
_In_ DWORD AuthScheme,
_In_ LPCWSTR pwszUserName,
_In_ LPCWSTR pwszPassword,
_Reserved_ LPVOID pAuthParams
);
作用:設(shè)置HTTP請(qǐng)求證書。
參數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句柄。
AuthTargets [in]
授權(quán)目標(biāo),取值:
WINHTTP_AUTH_TARGET_SERVERserver授權(quán)
WINHTTP_AUTH_TARGET_PROXY代理授權(quán)
AuthScheme [in]
認(rèn)證方式,通過 WinHttpQueryAuthSchemes能夠得到支持哪些認(rèn)證方式。
通常有:
WINHTTP_AUTH_SCHEME_BASICBASIC認(rèn)證方式。
WINHTTP_AUTH_SCHEME_NTLMNTLM認(rèn)證方式。
WINHTTP_AUTH_SCHEME_PASSPORTPASSPORT認(rèn)證方式。
WINHTTP_AUTH_SCHEME_DIGESTDIGEST認(rèn)證方式。
WINHTTP_AUTH_SCHEME_NEGOTIATE在NTLM , Kerberos之間的認(rèn)證方式。
pwszUserName [in]
證書的username
pwszPassword [in]
證書的password
pAuthParams [in]
保留參數(shù),設(shè)置為NULL。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpSetDefaultProxyConfiguration(
_In_ WINHTTP_PROXY_INFO *pProxyInfo
);
作用:設(shè)置默認(rèn)代理配置。
參數(shù):
pProxyInfo [in]
一個(gè)指向WINHTTP_PROXY_INFO的結(jié)構(gòu)體指針。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpSetOption(
_In_ HINTERNET hInternet,
_In_ DWORD dwOption,
_In_ LPVOID lpBuffer,
_In_ DWORD dwBufferLength
);
作用:IE選項(xiàng)設(shè)置。
參數(shù):
hInternet [in]
會(huì)話或請(qǐng)求句柄。
dwOption [in]
IE選項(xiàng)。值參考: Option Flags 。
lpBuffer [in]
選項(xiàng)緩沖區(qū)。
dwBufferLength [in]
無符號(hào)長(zhǎng)整型值。包括lpBuffer緩沖區(qū)的長(zhǎng)度。
下列選項(xiàng)中指定的字符緩沖區(qū)的長(zhǎng)度;全部其它選項(xiàng),指定的長(zhǎng)度(以字節(jié)為單位)。
返回值:TRUE or FALSE
WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(
_In_ HINTERNET hInternet,
_In_ WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
_In_ DWORD dwNotificationFlags,
_Reserved_ DWORD_PTR dwReserved
);
作用:設(shè)置回調(diào)函數(shù)來得到請(qǐng)求狀態(tài)。
參數(shù):
hInternet [in]
須要設(shè)置回調(diào)函數(shù)的句柄。
lpfnInternetCallback [in]
回調(diào)函數(shù)指針。假設(shè)設(shè)置為NULL。則不使用回調(diào)。
回調(diào)函數(shù)聲明參考WINHTTP_STATUS_CALLBACK
typedef void ( CALLBACK *WINHTTP_STATUS_CALLBACK)(
_In_ HINTERNET hInternet,
_In_ DWORD_PTR dwContext,
_In_ DWORD dwInternetStatus,
_In_ LPVOID lpvStatusInformation,
_In_ DWORD dwStatusInformationLength
);
dwNotificationFlags [in]
回調(diào)函數(shù)事件通知標(biāo)識(shí)。
取值:
WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS不論什么處理完畢的通知。
WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS不論什么狀態(tài)改變時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_RESOLVE_NAME解釋名稱完畢時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER當(dāng)連接到服務(wù)時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_DETECTING_PROXY當(dāng)檢測(cè)到server時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE當(dāng)獲到數(shù)據(jù)時(shí)激知該通知。
WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE當(dāng)返回響應(yīng)頭時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_READ_COMPLETE當(dāng)數(shù)據(jù)讀取完畢時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_REQUEST_ERROR當(dāng)異步操作請(qǐng)求錯(cuò)誤時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_SEND_REQUEST當(dāng)通過調(diào)用WinHttpSendRequest開始發(fā)送時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE當(dāng)通過調(diào)用WinHttpSendRequest發(fā)送完畢時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE當(dāng)POST數(shù)據(jù)操作完畢時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE當(dāng)Response響應(yīng)接收資源時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION當(dāng)正在關(guān)閉連接時(shí)激活該通知。
WINHTTP_CALLBACK_FLAG_HANDLES當(dāng)HTTP連接創(chuàng)建或關(guān)閉時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_REDIRECT當(dāng)請(qǐng)求重定向時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE當(dāng)接收到一個(gè)來自server的消息中間狀態(tài)代碼(100level)時(shí)激活通知。
WINHTTP_CALLBACK_FLAG_SECURE_FAILURE當(dāng)證書認(rèn)證失敗時(shí)激活該通知。
dwReserved [in]
保留參數(shù),設(shè)置為NULL。
返回值:
假設(shè)調(diào)用成功則返回CALLBACK的函數(shù)指針。假設(shè)失敗返回WINHTTP_INVALID_STATUS_CALLBACK。則調(diào)用getlasterror來查詢信息。
BOOL WINAPI WinHttpSetTimeouts(
_In_ HINTERNET hInternet,
_In_ int dwResolveTimeout,
_In_ int dwConnectTimeout,
_In_ int dwSendTimeout,
_In_ int dwReceiveTimeout
);
作用:設(shè)置HTTP請(qǐng)求超時(shí)。
參數(shù):
hInternet [in]
通過WinHttpOpen 或 WinHttpOpenRequest返回的句柄。
dwResolveTimeout [in]
設(shè)置處理請(qǐng)求超時(shí)時(shí)間,以毫秒為單位。假設(shè)為0,表示不使用超時(shí)。
Windows Vista和Windows XP:假設(shè)DNS超時(shí)時(shí)間使用NAME_RESOLUTION_TIMEOUT指定的,是每一個(gè)請(qǐng)求一個(gè)線程的開銷。
dwConnectTimeout [in]
設(shè)置連接超時(shí)時(shí)間,以毫秒為單位,默覺得60秒。
dwSendTimeout [in]
設(shè)置發(fā)送請(qǐng)求的超時(shí)時(shí)間,默覺得30秒。
dwReceiveTimeout [in]
設(shè)置響應(yīng)接收的超時(shí)時(shí)間,默覺得30秒。
返回值:TRUE or FALSE
BOOL WINAPI WinHttpTimeFromSystemTime(
_In_ const SYSTEMTIME *pst,
_Out_ LPWSTR pwszTime
);
作用:格式化系統(tǒng)時(shí)間。
參數(shù):
pst [in]
指向SYSTEMTIME 結(jié)構(gòu)的指針。
pwszTime [out]
緩沖區(qū)。緩沖區(qū)的大小與WINHTTP_TIME_FORMAT_BUFSIZE相等。
返回值:TRUE or FALSE
BOOL WINAPI WinHttpTimeToSystemTime(
_In_ LPCWSTR pwszTime,
_Out_ SYSTEMTIME *pst
);
作用:將本地時(shí)間轉(zhuǎn)為系統(tǒng)時(shí)間。
參數(shù):
pwszTime [in]
指向一個(gè)時(shí)間格式的字符串, 這個(gè)時(shí)間格式必須符合RFC2616中的3.3章節(jié)中的格式。
pst [out]
指向轉(zhuǎn)換后的系統(tǒng)時(shí)間SYSTEMTIME結(jié)構(gòu)指針。
返回值:TRUE or FALSE
BOOL WINAPI WinHttpWriteData(
_In_ HINTERNET hRequest,
_In_ LPCVOID lpBuffer,
_In_ DWORD dwNumberOfBytesToWrite,
_Out_ LPDWORD lpdwNumberOfBytesWritten
);
作用:寫內(nèi)存數(shù)據(jù)。
參數(shù):
hRequest [in]
調(diào)用WinHttpOpenRequest返回的句柄。 在調(diào)用該方法前必須等待函數(shù) WinHttpSendRequest 調(diào)用完畢。
lpBuffer [in]
發(fā)送到server的BUFFER數(shù)據(jù),確保數(shù)據(jù)的有效性必須直到WinHttpWriteData調(diào)用完畢。
dwNumberOfBytesToWrite [in]
須要寫入的數(shù)據(jù)長(zhǎng)度。
lpdwNumberOfBytesWritten [out]
寫完畢的buffer大小,假設(shè)設(shè)置為NULL,則使用異步的方式時(shí)須要在回調(diào)中進(jìn)行寫入。
返回值:TRUE or FALSE
DWORD WINAPI WinHttpWebSocketClose(
_In_ HINTERNET hWebSocket,
_In_ USHORT usStatus,
_In_opt_ PVOID pvReason,
_In_ DWORD dwReasonLength
);
作用:關(guān)閉WEB 的SOCKET
參數(shù):
hWebSocket [in]
web socket句柄。注:假設(shè)調(diào)用了WinHttpCloseHandle來關(guān)閉該句柄,則不用再次調(diào)用該函數(shù)來關(guān)閉。
usStatus [in]
狀態(tài)代碼。見 WINHTTP_WEB_SOCKET_CLOSE_STATUS 中的詳細(xì)值。
pvReason [in, optional]
具體的關(guān)閉原因。
dwReasonLength [in]
原因內(nèi)容的長(zhǎng)度。假設(shè)為0。則大為小0-123 即124長(zhǎng)度。
HINTERNET WINAPI WinHttpWebSocketCompleteUpgrade(
_In_ HINTERNET hRequest,
_In_opt_ DWORD_PTR pContext
);
作用:WEBSOCKET更新完畢。
hRequest [in]
http 請(qǐng)求句柄。
pContext [in, optional]
上下文關(guān)聯(lián)的新句柄。
返回值:
返回新的WebSocket句柄。
DWORD WINAPI WinHttpWebSocketQueryCloseStatus(
_In_ HINTERNET hWebSocket,
_Out_ USHORT *pusStatus,
_Out_ PVOID pvReason,
_In_ DWORD dwReasonLength,
_Out_ DWORD *pdwReasonLengthConsumed
);
作用:WEBSOCKET關(guān)閉狀態(tài)查詢。
參數(shù):
hWebSocket [in]
WebSocket句柄。
pusStatus [out]
狀態(tài)碼,見WINHTTP_WEB_SOCKET_CLOSE_STATUS列表中的值。
pvReason [out]
關(guān)閉的原因。
dwReasonLength [in]
原因內(nèi)容的長(zhǎng)度。
pdwReasonLengthConsumed [out]
假設(shè)pvReason為空且dwReasonLength為0,則此值將包括由調(diào)用應(yīng)用程序須要分配的緩沖區(qū)的大小。
返回值:
假設(shè)成功返回NO_ERROR 。
假設(shè)失敗返回:
ERROR_INSUFFICIENT_BUFFER
ERROR_INVALID_OPERATION
ERROR_INVALID_PARAMETER
DWORD WINAPI WinHttpWebSocketReceive(
_In_ HINTERNET hWebSocket,
_Out_ PVOID pvBuffer,
_In_ DWORD dwBufferLength,
_Out_ DWORD *pdwBytesRead,
_Out_ WINHTTP_WEB_SOCKET_BUFFER_TYPE *peBufferType
);
作用:接收數(shù)據(jù)。
參數(shù):
hWebSocket [in]
WebSocket句柄。
pvBuffer [out]
接收數(shù)據(jù)的緩沖區(qū)。
dwBufferLength [in]
緩沖區(qū)長(zhǎng)度。
pdwBytesRead [out]
讀取數(shù)據(jù)操作,假設(shè)調(diào)用WinHttpWebSocketReceive 返回NO_ERROR 且句柄為同步模式。
peBufferType [out]
緩沖區(qū)指針,這個(gè)設(shè)置僅僅有當(dāng)WinHttpWebSocketReceive 同步模式開啟且返回NO_ERROR 時(shí)才有值。
返回值:
成功調(diào)用返回NO_ERROR
失敗調(diào)用返回錯(cuò)誤碼:
ERROR_INVALID_OPERATION操作無效。
ERROR_INVALID_PARAMETER參數(shù)無效。
ERROR_INVALID_SERVER_RESPONSEserver響應(yīng)無效。
ERROR_WINHTTP_OPERATION_CANCELLED操作被取消。
DWORD WINAPI WinHttpWebSocketSend(
_In_ HINTERNET hWebSocket,
_In_ WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType,
_In_ PVOID pvBuffer,
_In_ DWORD dwBufferLength
);
作用:發(fā)送數(shù)據(jù)。
參數(shù):
hWebSocket [in]
websocket句柄。
eBufferType [in]
緩沖區(qū)類型。假設(shè)不指定WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE,用戶須要使用WinHttpWebSocketClose或WinHttpWebSocketShutdown進(jìn)行關(guān)閉連接。
pvBuffer [in]
發(fā)送緩沖區(qū)。當(dāng)dwBufferLength為0時(shí),能夠設(shè)置為NULL。
dwBufferLength [in]
緩沖區(qū)的長(zhǎng)度。
返回值:
成功返回NO_ERROR
失敗返回
ERROR_INVALID_OPERATION操作無效。
ERROR_INVALID_PARAMETER參數(shù)無效。
DWORD WINAPI WinHttpWebSocketShutdown(
_In_ HINTERNET hWebSocket,
_In_ USHORT usStatus,
_In_opt_ PVOID pvReason,
_In_ DWORD dwReasonLength
);
作用:關(guān)閉SOCKET。
參數(shù):
hWebSocket [in]
WebSocket句柄。
usStatus [in]
參見WINHTTP_WEB_SOCKET_CLOSE_STATUS列表。
pvReason [in, optional]
shutdown的原因。
dwReasonLength [in]
shutdown原因的內(nèi)容長(zhǎng)度。
假設(shè)填為NULL。則默信為0-123
返回值:
全部的錯(cuò)誤代碼表明,底層的TCP連接已中斷。
ERROR_IO_PENDING操作將異步完畢。
參考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa384257(v=vs.85).aspx
總結(jié)
以上是生活随笔為你收集整理的WINHTTP的API接口说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《深入浅出数据分析》读书笔记
- 下一篇: (转)C#创建datatable