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
指向以 Null 結尾的字串的指標,其中包含指定 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。 傳回的錯誤代碼包括以下內容。
| 錯誤碼 | Description |
|---|---|
|
此作業提供的控點類型不正確。 |
|
發生內部錯誤。 |
|
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);
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows XP、Windows 2000 Professional SP3 [僅限傳統型應用程式] |
| 支援的最低伺服器 | Windows Server 2003、Windows 2000 Server SP3 [僅限傳統型應用程式] |
| 目標平臺 | 窗戶 |
| Header | winhttp.h |
| Library | Winhttp.lib |
| DLL檔案 | Winhttp.dll |
| 可再發行套件 | Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更新版本。 |