共用方式為


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

指向以 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

包含網際網路旗標值的無符號長整數值。 這可以是下列一或多個值:

價值觀 Meaning
WINHTTP_FLAG_BYPASS_PROXY_CACHE
此旗標提供與 WINHTTP_FLAG_REFRESH相同的行為。
WINHTTP_FLAG_ESCAPE_DISABLE
傳入 pwszObjectName 的 URL 中的不安全字元不會轉換成逸出序列。
WINHTTP_FLAG_ESCAPE_DISABLE_QUERY
傳入 pwszObjectName 之 URL 查詢元件中的不安全字元不會轉換成逸出序列。
WINHTTP_FLAG_ESCAPE_PERCENT
傳入 pwszObjectName 的字串會從 LPCWSTR 轉換成 LPSTR。 所有不安全的字元都會轉換成包含百分比符號的逸出序列。 依預設,除百分比符號外,所有不安全的字元都會轉換為逸出序列。
WINHTTP_FLAG_NULL_CODEPAGE
傳入 pwszObjectName 的字串會假設由 WCHAR 所代表的有效 ANSI 字元組成。 不會檢查不安全的字元。

視窗7: 此選項已過時。

WINHTTP_FLAG_REFRESH
指出要求應該轉送至原始伺服器,而不是從 Proxy 伺服器傳送資源的快取版本。 使用此旗標時,會將「Pragma: no-cache」標頭新增至要求句柄。 建立 HTTP/1.1 請求標頭時,也會新增「Cache-Control: no-cache」。
WINHTTP_FLAG_SECURE
使用安全交易語意。 這轉化為使用安全通訊端層 (SSL)/傳輸層安全性 (TLS)。

傳回值

如果成功,則傳回有效的 HTTP 要求句柄,如果不成功,則傳回 NULL 。 如需擴充錯誤資訊,請呼叫 GetLastError。 傳回的錯誤代碼包括以下內容。

錯誤碼 Description
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
此作業提供的控點類型不正確。
ERROR_WINHTTP_INTERNAL_ERROR
發生內部錯誤。
ERROR_WINHTTP_INVALID_URL
URL 無效。
ERROR_WINHTTP_OPERATION_CANCELLED
作業已取消,通常是因為在作業完成之前,要求正在運作的控制碼已關閉。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
URL 指定了 “http:” 或 “https:” 以外的配置。
ERROR_NOT_ENOUGH_MEMORY
沒有足夠的記憶體可用來完成所要求的作業。 (Windows 錯誤代碼)

備註

傳回值表示成功或失敗。 若要取得擴充錯誤資訊,請呼叫 GetLastError

WinHttpOpenRequest 函式會建立新的 HTTP 要求控制碼,並將指定的參數儲存在該控制碼中。 HTTP 要求控點會保留要傳送至 HTTP 伺服器的要求,並包含要作為要求一部分傳送的所有 RFC822/MIME/HTTP 標頭。

如果 pwszVerb 設定為 “HEAD” ,則會忽略 Content-Length 標頭。

如果已使用 WinHttpSetStatusCallback 安裝狀態回呼函式,則 WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 通知指出 WinHttpOpenRequest 已建立要求控制碼。

呼叫應用程式完成使用 WinHttpOpenRequest 所傳回的 HINTERNET 句柄之後,必須使用 WinHttpCloseHandle 函式來關閉它。

便條 針對 Windows XP 和 Windows 2000,請參閱 WinHttp 起始頁面的 Run-Time 需求 一節。
 

範例

此範例示範如何取得 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 或更新版本。

另請參閱

關於 Microsoft Windows HTTP 服務 (WinHTTP)

WinHTTP 版本

WinHttpConnect

WinHttp開啟