Bagaimana pemrograman permintaan dan menetapkan pengaturan proxy di bawah Internet Explorer

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 226473 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menjelaskan langkah-langkah yang perlu untuk pemrograman permintaan dan menetapkan pengaturan informasi untuk Internet Explorer proxy.

Di bawah 4.x Internet Explorer dan sebelumnya, InternetSetOption dan InternetQueryOption api digunakan dengan bendera INTERNET_OPTION_PROXY. Sementara pilihan ini akan masih bekerja di bawah Internet Explorer 5, beberapa pilihan sambungan telah diperkenalkan di versi baru. Mengingat hal ini, bendera INTERNET_OPTION_PROXY akan kembali hanya server proxy "statis" pengaturan. Pilihan statis adalah informasi server proxy yang disimpan di bawah sarang HKEY_CURRENT_USER banyak cara yang sama itu di bawah Internet Explorer 4.0

Catatan INTERNET_OPTION_PROXY tidak secara permanen mengubah pengaturan. Hal ini untuk proses saat ini hanya ketika menangani NULL digunakan. Namun, itu juga dapat mengubah pengaturan pada dasar per sesi jika menangani sesi sah dikirim dalam (sesi menangani diperoleh dengan menggunakan InternetOpen() API).

Jika dalam Internet Explorer 5, Anda tentukan pilihan sambungan yang berbeda (seperti koneksi dial up) sebagai default, kemungkinan bahwa informasi proxy yang Anda memperoleh menggunakan INTERNET_OPTION_PROXY bendera mungkin salah untuk sesi Internet Explorer saat ini. Untuk alasan ini, di bawah Internet Explorer 5, disarankan bahwa INTERNET_OPTION_PER_CONNECTION_OPTION digunakan sebagai gantinya.

Catatan INTERNET_OPTION_PER_CONNECTION_OPTION menyebabkan pengaturan untuk berubah secara sistem ketika menangani NULL digunakan. Untuk dengan benar mencerminkan pengaturan global proxy, Anda harus menghubungi InternetSetOption fungsi dengan bendera pilihan INTERNET_OPTION_REFRESH. Atau, untuk menetapkan pengaturan secara per sesi, sesi berlaku pegangan dapat digunakan.

Catatan Masih dimungkinkan untuk mengubah informasi proxy untuk proses whgke tanpa mempengaruhi mesin global pengaturan Internet Explorer 5 dan versi yang lebih baru. Untuk melakukan ini, Anda harus menghubungi InternetSetOption fungsi pada pegangan yang dikembalikan oleh InternetOpen fungsi dengan menggunakan pilihan INTERNET_OPTION_PER_CONNECTION_OPTION. Contoh kode berikut perubahan proxy untuk seluruh proses meskipun hInternet menangani ditutup dan tidak digunakan untuk permintaan sebenarnya.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...);
InternetCloseHandle (hInternet);

INFORMASI LEBIH LANJUT

Di bawah Internet Explorer 4.x, mekanisme yang khas untuk query informasi proxy akan terlihat seperti ini:
unsigned long        nSize = 4096;
char                 szBuf[4096] = { 0 };
INTERNET_PROXY_INFO* pInfo = (INTERNET_PROXY_INFO*)szBuf;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo, &nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
				
Di bawah Internet Explorer 5, cara yang direkomendasikan adalah dengan menggunakan kode yang mirip dengan di bawah ini:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[5];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 5;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
   if(Option[0].Value.pszValue != NULL)
   printf("%s\n", Option[0].Value.pszValue);

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL)
  printf("PROXY_TYPE_AUTO_PROXY_URL\n");

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT)
   printf("PROXY_TYPE_AUTO_DETECT\n");

INTERNET_VERSION_INFO      Version;
nSize = sizeof(INTERNET_VERSION_INFO);

InternetQueryOption(NULL, INTERNET_OPTION_VERSION, &Version, &nSize);

if(Option[0].Value.pszValue != NULL)
   GlobalFree(Option[0].Value.pszValue);

if(Option[3].Value.pszValue != NULL)
   GlobalFree(Option[3].Value.pszValue);

if(Option[4].Value.pszValue != NULL)
   GlobalFree(Option[4].Value.pszValue);
				
Kode di atas menunjukkan koneksi dengan menetapkan pszConnection string dalam struktur INTERNET_PER_CONN_OPTION_LIST. Dengan menetapkan string ini ke NULL, informasi konfigurasi akan diperoleh untuk standar (atau LAN) pengaturan.

Pilihan pertama (pilihan INTERNET_PER_CONN_AUTOCONFIG_URL [0]) akan kembali URL yang ditetapkan untuk auto konfigurasi proxy server. Pilihan kedua (pilihan INTERNET_PER_CONN_AUTODISCOVERY_FLAG [1]) akan mendeteksi apakah otomatis mendeteksi pilihan diaktifkan atau tidak untuk koneksi yang ditentukan. Pilihan ketiga akan menentukan apa kombinasi bendera telah diatur untuk sambungan ini tertentu. Terakhir dua pilihan sesuai dengan informasi yang sama seperti diakses whe INTERNET_OPTION_PROXY yang digunakan dalam Internet Explorer 4.x.

Seperti yang Anda lihat juga, pilihan yang berpotensi dapat kembali nilai-nilai string yang dibebaskan menggunakan GlobalFree(). Hal ini karena buffer string yang dialokasikan untuk Anda oleh perpustakaan WININET, dan terserah kepada para programmer untuk membebaskan buffer setelah digunakan.

Untuk mendapatkan informasi untuk koneksi yang berbeda, hanya untuk mengubah string List.pszConnection untuk menunjuk ke entri pengaturan Dial-Up Anda sedang tertarik itu.

Demikian pula, untuk mengatur informasi proxy, Anda akan menggunakan teknik yang sama tetapi dengan InternetSetOption() sebaliknya, misalnya:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[1];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[0].Value.pszValue = "http://myproxy:8080";

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());

				
Sekali lagi, contoh di atas akan mengubah default (atau LAN) pengaturan (List.pszConnection == NULL). Dalam contoh, informasi server proksi "statis" berubah menjadi "http://myproxy" pada port 8080. Demikian pula Anda juga dapat mengubah konfigurasi otomatis URL:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[2];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[0].Value.pszValue = "http://myserver/get_proxy_info.dll";
Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_AUTO_PROXY_URL;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 2;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
				
Bila Anda mengkonfigurasi Internet Explorer untuk menggunakan proxy server untuk HTTP dan pergi langsung untuk protokol lain, gunakan kode untuk mengikuti.

Catatan Buffer yang dilewatkan ke INTERNET_PER_CONN_PROXY_SERVER memiliki pengaturan untuk masing-masing protokol (kode ini set hanya HTTP, dan protokol lainnya menggunakan sambungan langsung).

Catatan INTERNET_PER_CONN_FLAGS set nilai untuk kedua jenis Proxy (langsung dan melalui proxy) di salah satu elemen dari daftar pilihan Array, seperti yang ditunjukkan di bawah ini dalam kode.

Catatan Anda harus atau ini bendera di satu tempat. Jika Anda menempatkan bendera-bendera ini dalam daftar elemen lain, mereka akan menampilkan dengan benar (Internet Explorer pilihan), tetapi hanya salah satu bendera (pertama yang diatur) akan bekerja.
int main(int argc, char * argv[]) 
{ 
char buff[256] = "http=http://<ProxyServerName>:80"; 
// To include server for FTP, HTTPS, and so on, use the string
// (ftp=http://<ProxyServerName>:80; https=https://<ProxyServerName>:80) 
INTERNET_PER_CONN_OPTION_LIST    List; 
INTERNET_PER_CONN_OPTION         Option[3]; 
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER; 
Option[0].Value.pszValue = buff; 

Option[1].dwOption = INTERNET_PER_CONN_FLAGS; 
Option[1].Value.dwValue = PROXY_TYPE_PROXY; 
Option[1].Value.dwValue |= PROXY_TYPE_DIRECT; 
// This option sets all the possible connection types for the client. 
// This case specifies that the proxy can be used or direct connection is possible.

Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS; 
Option[2].Value.pszValue = "<local>"; 

 

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 
List.pszConnection = NULL; 
List.dwOptionCount = 3; 
List.dwOptionError = 0; 
List.pOptions = Option; 

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize)) 
printf("InternetSetOption failed! (%d)\n", GetLastError()); 

InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL); 
//The connection settings for other instances of Internet Explorer. 

return 0; 

}
				
Dalam contoh di atas (lagi default atau pengaturan LAN), Anda harus menentukan URL konfigurasi proxy otomatis dan mengatur bendera pilihan untuk mengaktifkan auto proxy konfigurasi.

REFERENSI

MSDN WinInet API dokumentasi, April 1999

Properti

ID Artikel: 226473 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Internet Explorer 4.01 Service Pack 1
Kata kunci: 
kbhowto kbmt KB226473 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:226473
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com