WinHttpReceiveResponse 函式 (winHTTP.h)
WinHttpReceiveResponse 函式會等候接收 WinHttpSendRequest 所起始 HTTP 要求的回應。 當 WinHttpReceiveResponse 成功完成時,狀態代碼和響應標頭已收到,且可供應用程式使用 WinHttpQueryHeaders 進行檢查。 應用程式必須先呼叫 WinHttpReceiveResponse ,才能使用 WinHttpQueryDataAvailable 和 WinHttpReadData 來存取回應實體主體 (如果有任何) 。
語法
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
參數
[in] hRequest
WinHttpOpenRequest 和 WinHttpSendRequest 所傳回的 HINTERNET 句柄。 等待 WinHttpSendRequest 完成此句柄,再呼叫 WinHttpReceiveResponse。
[in] lpReserved
此參數是保留的,而且必須是 NULL。
傳回值
如果成功,則傳回 TRUE ,否則傳回 FALSE 。 如需擴充錯誤資訊,請呼叫 GetLastError。 傳回的錯誤碼如下。
錯誤碼 | 描述 |
---|---|
|
如果與伺服器的連線失敗,則傳回 。 |
|
在剖析區塊編碼過程中遇到溢位條件時傳回。 |
|
當伺服器要求客戶端驗證時傳回。 |
|
與伺服器的連線已重設或終止,或遇到不相容的 SSL 通訊協定。 例如,除非客戶端特別啟用 SSL2,否則 WinHTTP 5.1 版不支援 SSL2。 |
|
當回應中出現比 WinHTTP 可接收的更多標頭時,傳回 。 |
|
當收到的標頭大小超過要求句柄的限制時, WinHttpReceiveResponse 會傳回。 |
|
無法執行要求的作業,因為提供的句柄未處於正確的狀態。 |
|
針對此作業提供的句柄類型不正確。 |
|
發生內部錯誤。 |
|
無法剖析伺服器回應。 |
|
URL 無效。 |
|
登入嘗試失敗。 發生此錯誤時,應該使用 WinHttpCloseHandle 關閉要求句柄。 必須先建立新的要求句柄,再重試原本產生此錯誤的函式。 |
|
無法解析伺服器名稱。 |
|
作業已取消,通常是因為要求在作業完成之前關閉的句柄。 |
|
重新導向失敗,因為配置已變更或所有嘗試重新導向失敗, (預設值為五次嘗試) 。 |
|
WinHTTP 函式失敗。 您可以在相同的要求句柄上重試所需的函式。 |
|
當傳入回應超過內部 WinHTTP 大小限制時傳回。 |
|
在伺服器所傳送的安全套接字層 (SSL) 憑證中找到一或多個錯誤。 若要判斷發生何種類型的錯誤,請檢查狀態回呼函式中的 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 通知。 如需詳細資訊,請參閱 WINHTTP_STATUS_CALLBACK。 |
|
要求已逾時。 |
|
URL 指定了 “HTTP:” 或 “https:” 以外的配置。 |
|
記憶體不足,無法完成要求的作業。 (Windows 錯誤碼) |
備註
即使 WinHTTP 用於異步模式 (亦即,在 WinHttpOpen) 中設定WINHTTP_FLAG_ASYNC時,此函式可以同步或異步操作。 如果此函式傳回 FALSE,此函式會失敗,而且您可以呼叫 GetLastError 以取得擴充的錯誤資訊。 如果此函式傳回 TRUE,應用程式應該預期 WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 完成回呼,表示成功,或 WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 完成回呼,表示作業以異步方式完成,但失敗。
如果狀態回呼函式已經與 WinHttpSetStatusCallback 一起安裝,則在 WinHttpSetStatusCallback 的 dwNotificationFlags 參數中設定的下列通知會指出接收回應的進度:
- WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
- WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
- WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
- WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
- WINHTTP_CALLBACK_STATUS_REDIRECT
- WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
- WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
範例
此範例顯示將數據寫入 HTTP 伺服器的程式代碼。 範例中提供的伺服器名稱 www.wingtiptoys.com 是虛構的,必須以您具有寫入許可權的伺服器名稱取代。
LPSTR pszData = "WinHttpWriteData Example";
DWORD dwBytesWritten = 0;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"A WinHTTP Example Program/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, L"www.wingtiptoys.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
// Create an HTTP Request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"PUT",
L"/writetst.txt",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a Request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
(DWORD)strlen(pszData), 0);
// Write data to the server.
if (bResults)
bResults = WinHttpWriteData( hRequest, pszData,
(DWORD)strlen(pszData),
&dwBytesWritten);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// Report any errors.
if (!bResults)
printf("Error %d has occurred.\n",GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP、Windows 2000 Professional 與 SP3 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003、Windows 2000 Server 與 SP3 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winhttp.h |
程式庫 | Winhttp.lib |
Dll | Winhttp.dll |
可轉散發套件 | Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更新版本。 |