共用方式為


設定和擷取網際網路選項

本主題描述如何使用 InternetSetOptionInternetQueryOption 函式來設定和擷取網際網路選項。

網際網路選項可以在 Microsoft Internet Explorer 中設定或擷取指定的 HINTERNET 控制碼或目前的設定。

實作步驟

若要設定或擷取網際網路選項,請完成下列動作:

選擇網際網路選項

因為有許多網際網路選項,所以選擇正確的選項很重要。 許多網際網路選項會影響 WinINet 函式和 Internet Explorer 的行為:

例如,您可以:

  • 藉由設定使用者名稱和密碼來處理基本伺服器和 Proxy 驗證。
  • 設定或擷取伺服器用來識別用戶端應用程式或瀏覽器功能的使用者代理程式字串。
  • 擷取指定 HINTERNET 控制碼的控制碼類型。

如需詳細資訊和網際網路選項清單,請參閱 選項旗標

在 Internet Explorer 5 和更新版本中,您可以使用 INTERNET_PER_CONN_OPTION_LISTINTERNET_PER_CONN_OPTION 結構,從特定網際網路連線設定或擷取某些選項。 如需詳細資訊和可從特定網際網路連線設定或擷取的選項清單,請參閱INTERNET_PER_CONN_OPTION結構的dwOptions成員。

選擇 HINTERNET 控制碼

用來設定或擷取網際網路選項的 HINTERNET 控制碼會決定作業的範圍。 透過這個控制碼建立的所有控制碼都會繼承此控制碼上設定的選項。

例如,需要具有驗證 Proxy 的用戶端應用程式,在每次應用程式嘗試存取網際網路資源時,可能不需要設定 Proxy 使用者名稱和密碼。 如果指定連線上的所有要求都是由相同的 Proxy 處理,請在連線類型 HINTERNET 控制碼上設定 Proxy 使用者名稱和密碼,也就是呼叫 InternetConnect所建立的控制碼,允許衍生自這個 HINTERNET 控制碼的任何呼叫使用相同的 Proxy 使用者名稱和密碼。 每次由 HttpOpenRequest建立HINTERNET控制碼時,設定 Proxy 使用者名稱和密碼會需要額外和不必要的額外負荷。 請注意,如果應用程式使用需要驗證的 Proxy,它應該在每個新的連線上設定 Proxy 認證。

設定或擷取選項

當您判斷要使用的網際網路選項和 HINTERNET 控制碼時,擷取這些網際網路選項。 若要設定或擷取選項,請呼叫 InternetQueryOptionInternetSetOption

HINTERNET 控制碼的範圍

用來設定或擷取網際網路選項的 HINTERNET 控制碼會決定選項有效的動作。

這些控制碼有三個層級:

  • 呼叫InternetOpen) 所建立的根HINTERNET控制碼 (會包含影響此 WinINet 實例的所有網際網路選項。
  • HINTERNET 控制碼,該控制碼會連線到呼叫 InternetConnect) 所建立的伺服器 (
  • HINTERNET 控制碼與特定伺服器上的資源或資源列舉相關聯。

除了各種 HINTERNET 控制碼之外,應用程式也可以使用 Null 來設定或擷取 Internet Explorer 和 WinINet 函式所使用的網際網路選項預設值。 當使用 Null 作為控制碼時,設定網際網路選項會變更目前儲存在登錄中的選項預設值。 用戶端應用程式不應該使用登錄函式來變更網際網路選項的預設值,因為未來可以變更儲存選項的方式實作。

下表列出 HINTERNET 控制碼的類型,以及與其相關聯的網際網路選項範圍。

控制碼類型 範圍
NULL Internet Explorer 的預設選項設定。
INTERNET_HANDLE_TYPE_CONNECT_FTP 這個連線至 FTP 伺服器的選項設定。 這些選項會影響從這個 HINTERNET 控制碼起始的任何作業,例如檔案下載。
INTERNET_HANDLE_TYPE_CONNECT_GOPHER 此連線至 Gopher 伺服器的選項設定。 這些選項會影響從這個 HINTERNET 控制碼起始的任何作業,例如檔案下載。 注意: 僅限 Windows XP 和 Windows Server 2003 R2 和更早版本。
INTERNET_HANDLE_TYPE_CONNECT_HTTP 此連線至 HTTP 伺服器的選項設定。 這些選項會影響從這個 HINTERNET 控制碼起始的任何作業,例如檔案下載。
INTERNET_HANDLE_TYPE_FILE_REQUEST 與此檔案要求相關聯的選項設定。
INTERNET_HANDLE_TYPE_FTP_FILE 與此 FTP 資源下載相關聯的選項設定。
INTERNET_HANDLE_TYPE_FTP_FILE_HTML 與這個 FTP 資源相關聯的選項設定會以 HTML 格式下載。
INTERNET_HANDLE_TYPE_FTP_FIND 與 FTP 伺服器上的檔案搜尋相關聯的選項設定。
INTERNET_HANDLE_TYPE_FTP_FIND_HTML 與這個搜尋 HTML 格式之 FTP 伺服器上的檔案相關聯的選項設定。
INTERNET_HANDLE_TYPE_GOPHER_FILE 與此 Gopher 資源下載相關聯的選項設定。 注意: 僅限 Windows XP 和 Windows Server 2003 R2 和更早版本。
INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 與這個 Gopher 資源相關聯的選項設定會以 HTML 格式下載。 注意: 僅限 Windows XP 和 Windows Server 2003 R2 和更早版本。
INTERNET_HANDLE_TYPE_GOPHER_FIND 與 Gopher 伺服器上這個檔案搜尋相關聯的選項設定。 注意: 僅限 Windows XP 和 Windows Server 2003 R2 和更早版本。
INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 與以 HTML 格式化之 Gopher 伺服器上的檔案搜尋相關聯的選項設定。 注意: 僅限 Windows XP 和 Windows Server 2003 R2 和更早版本。
INTERNET_HANDLE_TYPE_HTTP_REQUEST 與此 HTTP 要求相關聯的選項設定。
INTERNET_HANDLE_TYPE_INTERNET 與 WinINet 函式這個實例相關聯的選項設定。

設定個別選項

判斷您想要設定的網際網路選項,以及您想要受這些選項影響的範圍之後,設定網際網路選項並不複雜。 您只需要呼叫具有所需HINTERNET控制碼、網際網路選項旗標的InternetSetOption函式,以及包含所要設定資訊的緩衝區。

下列範例示範如何在指定的 HINTERNET 控制碼上設定 Proxy 使用者名稱和密碼。

// strUsername is a string buffer of cchMax characters or less.
// It contains the proxy user name.
size_t cchMax = 80;
size_t cchUserLength, cchPasswordLength;
HRESULT hr = StringCchLength(strUsername, cchMax, &cchUserLength);

if (SUCCEEDED(hr))
{
   // hOpen is the HINTERNET handle created by InternetConnect.
   InternetSetOption(hConnect, INTERNET_OPTION_PROXY_USERNAME,
      strUsername, DWORD(cchUserLength)+1);
}
else
{
   // Insert error handling code here.
}

// strPassword is the string buffer that contains the proxy password.
hr = StringCchLength(strPassword, cchMax, &cchPasswordLength);

InternetSetOption(hOpen, INTERNET_OPTION_PROXY_PASSWORD,
    strPassword, DWORD(cchPasswordLength)+1);

擷取個別選項

您可以使用 InternetQueryOption 函式來擷取網際網路選項。 若要擷取網際網路選項:

  1. 判斷擷取網際網路選項資訊所需的緩衝區大小。

    緩衝區大小可以藉由針對緩衝區的位址使用 Null 來決定,並將緩衝區大小傳遞為零。

    DWORD dwSize;
    InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);
    

    InternetQueryOption傳回的值是擷取資訊所需的記憶體數量,以位元組為單位。

  2. 配置緩衝區的記憶體。

    char *lpszData;
    lpszData = new char[dwSize];
    
  3. 擷取資料。

    InternetQueryOption( NULL, 
                         INTERNET_OPTION_USER_AGENT,
                         lpszData, &dwSize );
    
  4. 釋放記憶體。

    delete [] lpszData;
    

完整範例

以下是上一節中使用的完整範例。 此範例示範如何擷取預設使用者代理程式字串。

// This call determines the required buffer size.
DWORD dwSize;
InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);

// Allocate the necessary memory.
char *lpszData;
lpszData = new char[dwSize];

// Call InternetQueryOption again with the provided buffer.
InternetQueryOption( NULL, 
                     INTERNET_OPTION_USER_AGENT,
                     lpszData, &dwSize );

// Insert code here to use the user agent string data.

// Free the allocated memory.
delete [] lpszData;

設定連線選項

在 Internet Explorer 5 和更新版本中,您可以在特定連線上設定網際網路選項。 之前,所有連線都共用相同的網際網路選項設定。 若要設定特定連線的選項:

  1. 建立 INTERNET_PER_CONN_OPTION_LIST 結構。
  2. 為您想要為連線設定的個別網際網路選項配置記憶體。
  3. INTERNET_PER_CONN_OPTION 結構中設定選項。
  4. 使用 InternetSetOption 設定選項。

下列程式碼範例示範如何設定 LAN 連線的 Proxy 資料。

BOOL SetConnectionOptions()
{
    INTERNET_PER_CONN_OPTION_LIST list;
    BOOL    bReturn;
    DWORD   dwBufSize = sizeof(list);

    // Fill the list structure.
    list.dwSize = sizeof(list);

    // NULL == LAN, otherwise connectoid name.
    list.pszConnection = NULL;

    // Set three options.
    list.dwOptionCount = 3;
    list.pOptions = new INTERNET_PER_CONN_OPTION[3];

    // Ensure that the memory was allocated.
    if(NULL == list.pOptions)
    {
        // Return FALSE if the memory wasn't allocated.
        return FALSE;
    }

    // Set flags.
    list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
    list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
        PROXY_TYPE_PROXY;

    // Set proxy name.
    list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
    list.pOptions[1].Value.pszValue = TEXT("https://proxy:80");

    // Set proxy override.
    list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
    list.pOptions[2].Value.pszValue = TEXT("local");

    // Set the options on the connection.
    bReturn = InternetSetOption(NULL,
        INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);

    // Free the allocated memory.
    delete [] list.pOptions;

    return bReturn;
}

擷取連線選項

在 Internet Explorer 5 和更新版本中,可以從特定連線擷取網際網路選項。 若要從特定連線擷取選項:

  1. 建立 INTERNET_PER_CONN_OPTION_LIST 結構。
  2. 配置個別網際網路選項的記憶體,以從連線擷取。
  3. 使用 INTERNET_PER_CONN_OPTION 結構來指定選項。
  4. 使用 InternetQueryOption擷取選項。
  5. 利用選項資料。
  6. 使用 GlobalFree 函式釋放配置來保存選項資料的記憶體。

注意

WinINet 不支援伺服器實作。 此外,不應該從服務使用它。 對於伺服器實作或服務,請使用 Microsoft Windows HTTP Services (WinHTTP)

處理驗證

HINTERNET 控制碼