Bagikan melalui


Mengatur dan Mengambil Opsi Internet

Topik ini menjelaskan cara mengatur dan mengambil opsi Internet menggunakan fungsi InternetSetOption dan InternetQueryOption .

Opsi Internet dapat diatur pada, atau diambil dari, handel HINTERNET tertentu atau pengaturan saat ini di Microsoft Internet Explorer.

Langkah-langkah Implementasi

Untuk mengatur atau mengambil opsi Internet, selesaikan hal berikut:

Memilih Opsi Internet

Karena ada begitu banyak opsi Internet, memilih opsi yang tepat adalah penting. Banyak opsi Internet mempengaruhi perilaku fungsi WinINet dan Internet Explorer:

Sebagai contoh, Anda dapat:

  • Tangani server dasar dan autentikasi proksi dengan mengatur nama pengguna dan kata sandi.
  • Atur atau ambil string agen pengguna yang digunakan oleh server untuk mengidentifikasi fitur aplikasi atau browser klien.
  • Ambil jenis handel handel HINTERNET yang ditentukan.

Untuk informasi selengkapnya dan daftar opsi Internet, lihat Bendera opsi.

Di Internet Explorer 5 dan yang lebih baru, beberapa opsi dapat diatur atau diambil dari koneksi Internet tertentu menggunakan struktur INTERNET_PER_CONN_OPTION_LIST dan INTERNET_PER_CONN_OPTION . Untuk informasi selengkapnya dan daftar opsi yang dapat diatur atau diambil dari koneksi Internet tertentu, lihat anggota dwOptions dari struktur INTERNET_PER_CONN_OPTION .

Memilih Handel HINTERNET

Handel HINTERNET yang digunakan untuk mengatur atau mengambil opsi Internet menentukan cakupan operasi. Semua handel yang dibuat melalui handel ini akan mewarisi opsi yang diatur pada handel ini.

Misalnya, aplikasi klien yang memerlukan proksi dengan autentikasi, mungkin tidak memerlukan pengaturan nama pengguna dan kata sandi proksi setiap kali aplikasi mencoba mengakses sumber daya Internet. Jika semua permintaan pada koneksi tertentu ditangani oleh proksi yang sama, mengatur nama pengguna proksi dan kata sandi pada jenis koneksi yang ditangani HINTERNET , yaitu, handel yang dibuat oleh panggilan ke InternetConnect, akan memungkinkan setiap panggilan yang berasal dari handel HINTERNET ini untuk menggunakan nama pengguna dan kata sandi proksi yang sama. Mengatur nama pengguna dan kata sandi proksi setiap kali handel HINTERNET dibuat oleh HttpOpenRequest akan memerlukan overhead tambahan dan yang tidak perlu. Ketahuilah bahwa jika aplikasi menggunakan proksi yang memerlukan autentikasi, aplikasi harus mengatur kredensial proksi pada setiap koneksi baru.

Mengatur atau Mengambil Opsi

Ketika Anda telah menentukan opsi Internet dan penanganan HINTERNET apa yang akan digunakan, ambil opsi Internet tersebut. Untuk mengatur atau mengambil opsi, panggil InternetQueryOption atau InternetSetOption.

Cakupan Handel HINTERNET

Handel HINTERNET yang digunakan untuk mengatur atau mengambil opsi Internet menentukan tindakan yang opsinya valid.

Handel ini memiliki tiga tingkat:

  • Handel HINTERNET akar (dibuat oleh panggilan ke InternetOpen) akan berisi semua opsi Internet yang memengaruhi instans WinINet ini.
  • HINTERNET menangani yang tersambung ke server (dibuat oleh panggilan ke InternetConnect)
  • HINTERNET menangani yang terkait dengan sumber daya atau enumerasi sumber daya pada server tertentu.

Selain berbagai handel HINTERNET , aplikasi juga dapat menggunakan NULL untuk mengatur atau mengambil nilai default opsi Internet yang digunakan oleh Internet Explorer dan fungsi WinINet. Mengatur opsi Internet saat menggunakan NULL saat handel mengubah nilai default opsi, yang saat ini disimpan dalam registri. Aplikasi klien tidak boleh menggunakan fungsi registri untuk mengubah nilai default opsi Internet, karena implementasi bagaimana opsi disimpan dapat diubah di masa mendatang.

Tabel berikut mencantumkan jenis handel HINTERNET dan cakupan opsi Internet yang terkait dengannya.

Jenis Handel Cakupan
NULL Pengaturan opsi default untuk Internet Explorer.
INTERNET_HANDLE_TYPE_CONNECT_FTP Pengaturan opsi untuk koneksi ini ke server FTP. Opsi ini memengaruhi operasi apa pun yang dimulai dari handel HINTERNET ini, seperti unduhan file.
INTERNET_HANDLE_TYPE_CONNECT_GOPHER Pengaturan opsi untuk koneksi ini ke server Gopher. Opsi ini memengaruhi operasi apa pun yang dimulai dari handel HINTERNET ini, seperti unduhan file. Catatan: Windows XP dan Windows Server 2003 R2 dan yang lebih lama saja.
INTERNET_HANDLE_TYPE_CONNECT_HTTP Pengaturan opsi untuk koneksi ini ke server HTTP. Opsi ini memengaruhi operasi apa pun yang dimulai dari handel HINTERNET ini, seperti unduhan file.
INTERNET_HANDLE_TYPE_FILE_REQUEST Pengaturan opsi yang terkait dengan permintaan file ini.
INTERNET_HANDLE_TYPE_FTP_FILE Pengaturan opsi yang terkait dengan unduhan sumber daya FTP ini.
INTERNET_HANDLE_TYPE_FTP_FILE_HTML Pengaturan opsi yang terkait dengan unduhan sumber daya FTP ini diformat dalam HTML.
INTERNET_HANDLE_TYPE_FTP_FIND Pengaturan opsi yang terkait dengan pencarian file ini pada server FTP.
INTERNET_HANDLE_TYPE_FTP_FIND_HTML Pengaturan opsi yang terkait dengan pencarian file ini pada server FTP yang diformat dalam HTML.
INTERNET_HANDLE_TYPE_GOPHER_FILE Pengaturan opsi yang terkait dengan unduhan sumber daya Gopher ini. Catatan: Windows XP dan Windows Server 2003 R2 dan yang lebih lama saja.
INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML Pengaturan opsi yang terkait dengan unduhan sumber daya Gopher ini diformat dalam HTML. Catatan: Windows XP dan Windows Server 2003 R2 dan yang lebih lama saja.
INTERNET_HANDLE_TYPE_GOPHER_FIND Pengaturan opsi yang terkait dengan pencarian file ini di server Gopher. Catatan: Windows XP dan Windows Server 2003 R2 dan yang lebih lama saja.
INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML Pengaturan opsi yang terkait dengan pencarian file ini pada server Gopher yang diformat dalam HTML. Catatan: Windows XP dan Windows Server 2003 R2 dan yang lebih lama saja.
INTERNET_HANDLE_TYPE_HTTP_REQUEST Pengaturan opsi yang terkait dengan permintaan HTTP ini.
INTERNET_HANDLE_TYPE_INTERNET Pengaturan opsi yang terkait dengan instans fungsi WinINet ini.

Mengatur Opsi Individual

Setelah menentukan opsi Internet yang ingin Anda atur dan cakupan yang ingin Anda terpengaruh oleh opsi ini, pengaturan opsi Internet tidak rumit. Yang perlu Anda lakukan adalah memanggil fungsi InternetSetOption dengan handel HINTERNET yang diinginkan, bendera opsi Internet, dan buffer yang berisi informasi yang ingin Anda atur.

Contoh berikut menunjukkan cara mengatur nama pengguna dan kata sandi proksi pada handel HINTERNET tertentu.

// 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);

Mengambil Opsi Individual

Opsi internet dapat diambil menggunakan fungsi InternetQueryOption . Untuk mengambil opsi Internet:

  1. Tentukan ukuran buffer yang diperlukan untuk mengambil informasi opsi Internet.

    Ukuran buffer dapat ditentukan dengan menggunakan NULL untuk alamat buffer dan meneruskannya ukuran buffer nol.

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

    Nilai yang dikembalikan oleh InternetQueryOption adalah jumlah memori yang diperlukan untuk mengambil informasi, dalam byte.

  2. Alokasikan memori untuk buffer.

    char *lpszData;
    lpszData = new char[dwSize];
    
  3. Ambil data.

    InternetQueryOption( NULL, 
                         INTERNET_OPTION_USER_AGENT,
                         lpszData, &dwSize );
    
  4. Bebaskan memori.

    delete [] lpszData;
    

Sampel Lengkap

Berikut ini adalah sampel lengkap yang digunakan di bagian sebelumnya. Sampel ini menunjukkan cara mengambil string agen pengguna default.

// 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;

Mengatur Opsi Koneksi

Di Internet Explorer 5 dan yang lebih baru, opsi Internet dapat diatur untuk pada koneksi tertentu. Sebelumnya, semua koneksi berbagi pengaturan opsi Internet yang sama. Untuk mengatur opsi untuk koneksi tertentu:

  1. Buat struktur INTERNET_PER_CONN_OPTION_LIST .
  2. Alokasikan memori untuk opsi Internet individual yang ingin Anda atur untuk koneksi.
  3. Atur opsi dalam struktur INTERNET_PER_CONN_OPTION .
  4. Atur opsi menggunakan InternetSetOption.

Contoh kode berikut menunjukkan cara mengatur data proksi untuk koneksi LAN.

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;
}

Mengambil Opsi Koneksi

Di Internet Explorer 5 dan yang lebih baru, opsi Internet dapat diambil dari koneksi tertentu. Untuk mengambil opsi dari koneksi tertentu:

  1. Buat struktur INTERNET_PER_CONN_OPTION_LIST .
  2. Alokasikan memori untuk opsi Internet individual untuk mengambil dari koneksi.
  3. Tentukan opsi menggunakan struktur INTERNET_PER_CONN_OPTION .
  4. Ambil opsi menggunakan InternetQueryOption.
  5. Menggunakan data opsi.
  6. Bebaskan memori, dialokasikan untuk menyimpan data opsi, menggunakan fungsi GlobalFree .

Catatan

WinINet tidak mendukung implementasi server. Selain itu, itu tidak boleh digunakan dari layanan. Untuk implementasi atau layanan server, gunakan Microsoft Windows HTTP Services (WinHTTP).

Menangani Autentikasi

Handel HINTERNET