WinHttpOpenRequest 函式 (winhttp.h)
WinHttpOpenRequest 函式會建立 HTTP 要求句柄。
語法
WINHTTPAPI HINTERNET WinHttpOpenRequest(
[in] HINTERNET hConnect,
[in] LPCWSTR pwszVerb,
[in] LPCWSTR pwszObjectName,
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszReferrer,
[in] LPCWSTR *ppwszAcceptTypes,
[in] DWORD dwFlags
);
參數
[in] hConnect
WINHttpConnect 所傳回之 HTTP 工作階段的 HINTERNET 連線句柄。
[in] pwszVerb
字串的指標,其中包含要求中使用的 HTTP 動詞 命令。 如果此參數為 NULL,則函式會使用 GET 作為 HTTP 動詞命令。 注意 此字串應該是全部大寫。 許多伺服器會將 HTTP 動詞視為區分大小寫,而因特網工程工作組 (IETF) 批註要求 (RFC) 使用大寫字元來拼字這些動詞。
[in] pwszObjectName
字串的指標,其中包含指定之 HTTP 動詞命令的目標資源名稱。 這通常是檔名、可執行模組或搜尋規範。
[in] pwszVersion
包含 HTTP 版本的字串指標。 如果此參數為 NULL,則函式會使用 HTTP/1.1。
[in] pwszReferrer
字串的指標,指定從中取得 要求 pwszObjectName 中 URL 的檔 URL。 如果此參數設定為 WINHTTP_NO_REFERER,則不會指定參照檔。
[in] ppwszAcceptTypes
字串指標的 Null 終止陣列指標,指定用戶端接受的媒體類型。 如果此參數設定為 WINHTTP_DEFAULT_ACCEPT_TYPES,則用戶端不會接受任何類型。 通常,伺服器會處理缺少接受的類型,表示用戶端只接受 「text/*」 類型的檔;也就是說,只有文本文件,沒有圖片或其他二進位檔。 如需有效的媒體類型清單,請參閱IANA http://www.iana.org/assignments/media-types/在定義的媒體類型。
[in] dwFlags
包含因特網旗標值的不帶正負號長整數值。 可為下列一或多個值:
傳回值
如果成功,則傳回有效的 HTTP 要求句柄,否則傳回 NULL 。 如需擴充的錯誤資訊,請呼叫 GetLastError。 傳回的錯誤碼如下。
錯誤碼 | 描述 |
---|---|
|
此作業所提供的句柄類型不正確。 |
|
發生內部錯誤。 |
|
URL 無效。 |
|
作業已取消,通常是因為作業完成之前,要求已關閉的句柄。 |
|
URL 指定了 “HTTP:” 或 “https:” 以外的配置。 |
|
記憶體不足,無法完成要求的作業。 (Windows 錯誤碼) |
備註
傳回值表示成功或失敗。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
WinHttpOpenRequest 函式會建立新的 HTTP 要求句柄,並將指定的參數儲存在該句柄中。 HTTP 要求句柄會保留傳送至 HTTP 伺服器的要求,並包含所有要作為要求一部分傳送的 RFC822/MIME/HTTP 標頭。
如果 pwszVerb 設定為 “HEAD”,則會忽略 Content-Length 標頭。
如果已使用 WinHttpSetStatusCallback 安裝狀態回呼函式,則 WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 通知表示 WinHttpOpenRequest 已建立要求句柄。
呼叫應用程式使用 WinHttpOpenRequest 傳回的 HINTERNET 句柄完成之後,必須使用 WinHttpCloseHandle 函式來關閉它。
範例
此範例示範如何取得 HINTERNET 句柄、開啟 HTTP 工作階段、建立要求標頭,並將該標頭傳送至伺服器。
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,
0, 0);
// PLACE ADDITIONAL CODE HERE.
// 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、具有 SP3 的 Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winhttp.h |
程式庫 | Winhttp.lib |
Dll | Winhttp.dll |
可轉散發套件 | Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更新版本。 |