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