WINHTTP的API接口說明。


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM