Bagikan melalui


Mengaktifkan Fungsionalitas Internet

Sebelum menggunakan fungsi WinINet, aplikasi harus mencoba membuat koneksi ke Internet dengan menggunakan fungsi InternetAttemptConnect . Fungsi ini memanggil kotak dialog putar-nomor untuk memulai koneksi ke Internet atau memeriksa apakah koneksi sudah ada. Jika fungsi ini gagal, aplikasi dapat memasuki mode offline, yang memungkinkannya untuk mengakses informasi yang di-cache selama koneksi sebelumnya ke Internet.

Gunakan fungsi InternetCheckConnection untuk memeriksa koneksi ke Internet. Ini mencoba untuk ping server yang ditunjuk oleh URL yang diteruskan ke fungsi. Jika bendera FLAG_ICC_FORCE_CONNECTION diatur dan URL adalah NULL, fungsi memeriksa untuk melihat apakah ada entri di database server untuk server terdekat. Jika ada, fungsi ping server tersebut.

Selanjutnya, gunakan fungsi InternetOpen untuk menetapkan karakteristik koneksi Internet yang digunakan aplikasi klien. InternetOpen membuat handel HINTERNET akar yang digunakan untuk membuat sesi ftphttp. InternetBuka tidak menguji koneksi ke Internet untuk memverifikasi bahwa karakteristik yang diteruskan ke fungsi sudah benar.

Gunakan fungsi InternetConnect untuk membuat sesi tertentu. InternetConnect menginisialisasi sesi untuk situs yang ditentukan menggunakan argumen yang diteruskan ke dalamnya dan membuat handel HINTERNET yang merupakan cabang dari pegangan akar. InternetConnect tidak mencoba mengakses atau membuat koneksi ke situs yang ditentukan, kecuali dalam kasus sesi FTP. Fungsi FtpFindFirstFile, FtpOpenFile, dan HttpOpenRequest menggunakan handel yang dibuat oleh InternetConnect untuk membuat koneksi ke situs yang ditentukan.

Menggunakan InternetBuka

Untuk memfungsikan koneksi ke Internet, handel HINTERNET root harus dibuat dengan menggunakan InternetOpen. Informasi tentang agen pengguna (aplikasi yang memanggil fungsi Internet), jenis akses ke Internet, nama proksi, host dan alamat yang melewati proksi, dan perilaku diteruskan ke InternetBuka.

Mengatur Agen Pengguna

Aplikasi panggilan harus memberikan string yang berisi nama aplikasi atau entitas yang mengakses Internet ke parameter lpszAgentinternetOpen. String ini digunakan sebagai agen pengguna dalam protokol HTTP. Misalnya, Microsoft Internet Explorer menggunakan "Microsoft Internet Explorer".

Mengatur Jenis Akses

InternetOpen mendukung tiga jenis akses:

  • Gunakan INTERNET_OPEN_TYPE_DIRECT jika sistem tempat aplikasi berjalan menggunakan koneksi langsung ke Internet. Parameter lpszProxyName dan lpszProxyBypassinternetOpen tidak digunakan dan harus diatur ke NULL.
  • Gunakan INTERNET_OPEN_TYPE_PROXY jika sistem tempat aplikasi berjalan menggunakan satu atau beberapa server proksi untuk mengakses Internet. InternetOpen menggunakan server proksi yang ditunjukkan oleh lpszProxyName dan melewati proksi untuk setiap nama host atau alamat IP yang ditentukan oleh lpszProxyBypass.
  • Gunakan INTERNET_OPEN_TYPE_PRECONFIG untuk menginstruksikan aplikasi Anda untuk mengambil konfigurasi dari registri. Ini biasanya merupakan pilihan terbaik, karena sebagian besar aplikasi termasuk browser web menggunakan opsi ini.

INTERNET_OPEN_TYPE_PRECONFIG melihat nilai registri ProxyEnable, ProxyServer, dan ProxyOverride. Nilai-nilai ini terletak di bawah "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings".

Jika ProxyEnable adalah nol, aplikasi menggunakan INTERNET_OPEN_TYPE_DIRECT. Jika tidak, aplikasi menggunakan INTERNET_OPEN_TYPE_PROXY dan menggunakan informasi ProxyServer dan ProxyOverride .

Fungsi WinINet menyediakan dukungan untuk proksi jenis SOCKS hanya jika Internet Explorer diinstal. Penginstalan Internet Explorer mencakup file Wsock32n.dll, yang diperlukan untuk mendukung proksi SOCKS. Wsock32n.dll tidak dapat didistribusikan ulang.

Mencantumkan Server Proksi

WinINet mengenali dua jenis proksi: proksi jenis CERN (hanya HTTP) dan proksi TIS FTP (hanya FTP). Jika Internet Explorer diinstal, WinINet juga mendukung proksi jenis SOCKS. InternetConnect mengasumsikan, secara default, bahwa proksi yang ditentukan adalah proksi CERN. Jika jenis akses diatur ke INTERNET_OPEN_TYPE_DIRECT atau INTERNET_OPEN_TYPE_PRECONFIG, parameter lpszProxyNameInternetOpen harus diatur ke NULL. Jika tidak, nilai yang diteruskan ke lpszProxyName harus berisi proksi dalam string yang dibatasi spasi. Daftar proksi dapat berisi nomor port yang digunakan untuk mengakses proksi.

Untuk mencantumkan proksi untuk protokol tertentu, string harus mengikuti format ""<protokol protokol>><://<proxy_name>"". Protokol yang valid adalah HTTP, HTTPS, dan FTP. Misalnya, untuk mencantumkan proksi FTP, string yang valid adalah ""ftp=ftp://ftp_proxy_name:21"", di mana ftp_proxy_name adalah nama proksi FTP dan 21 adalah nomor port yang harus digunakan untuk mengakses proksi. Jika proksi menggunakan nomor port default untuk protokol tersebut, nomor port dapat dihilangkan. Jika nama proksi dicantumkan dengan sendirinya, nama tersebut digunakan sebagai proksi default untuk protokol apa pun yang tidak memiliki proksi tertentu yang ditentukan. Misalnya, ""http=https://http_proxy other"" akan menggunakan http_proxy untuk operasi HTTP apa pun, sementara semua protokol lain akan menggunakan yang lain.

Secara default, fungsi mengasumsikan bahwa proksi yang ditentukan oleh lpszProxyName adalah proksi CERN. Aplikasi dapat menentukan lebih dari satu proksi, termasuk proksi yang berbeda untuk protokol yang berbeda. Misalnya, jika Anda menentukan ""ftp=ftp://ftp-gw HTTP=https://jericho:99 proxy"", permintaan FTP dibuat melalui proksi ftp-gw, yang mendengarkan di port 21, dan permintaan HTTP dibuat melalui proksi CERN yang disebut jericho, yang mendengarkan di port 99. Jika tidak, permintaan HTTP akan dibuat melalui proksi CERN yang disebut proksi, yang mendengarkan di port 80. Perhatikan bahwa jika aplikasi hanya menggunakan FTP, misalnya, aplikasi tidak perlu menentukan ""ftp=ftp://ftp-gw:21"". Ini bisa menentukan hanya ""ftp-gw"". Aplikasi hanya diperlukan untuk menentukan nama protokol jika menggunakan lebih dari satu protokol per handel yang dikembalikan oleh InternetBuka.

Mencantumkan Bypass Proksi

Nama host atau alamat IP yang tidak boleh dikirim ke proksi dapat dicantumkan dalam daftar bypass proksi. Daftar ini dapat berisi kartubebas, "*", yang menyebabkan aplikasi melewati server proksi untuk alamat yang sesuai dengan pola yang ditentukan. Untuk mencantumkan beberapa alamat dan nama host, pisahkan dengan titik koma dalam string bypass proksi. Jika makro "<lokal>" ditentukan, fungsi melewati proksi untuk nama host apa pun yang tidak berisi titik.

Secara default, WinINet akan melewati proksi untuk permintaan yang menggunakan nama host "localhost", "loopback", "127.0.0.1", atau "[::1]". Perilaku ini ada karena server proksi jarak jauh biasanya tidak akan menyelesaikan alamat ini dengan benar.

Internet Explorer 9: Anda dapat menghapus komputer lokal dari daftar bypass proksi menggunakan makro "<-loopback>".

Contoh berikut menunjukkan contoh panggilan ke InternetBuka menggunakan string bypass proksi yang berbeda. Komentar di atas setiap panggilan menjelaskan efek apa yang dimiliki string bypass pada nama host yang diakses dari handel HINTERNET yang dibuatnya.

HINTERNET hInternetRoot;

/* bypass the proxy for any host name that does not 
    contain a period */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("<local>"), 0);

/* bypass the proxy for any host name that starts with the 
    letters "ms" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("ms*"), 0);

/* bypass the proxy for any host name that contains "int", 
    such as "internet" and "painter" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("*int*"), 0);

/* bypass the proxy for the host name "example" and any 
    host name that contains "test" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("example *test*"), 0);

/* Disable the loopback proxy bypass for localhost */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("127.0.0.1:8888"),TEXT("<-loopback>"), 0);

Menggunakan InternetConnect

Untuk memulai sesi, fungsi InternetConnect harus membuat handel dari handel akar yang dikembalikan oleh fungsi InternetOpen . InternetConnect menyetel alamat server, nomor port, nama pengguna, kata sandi, dan jenis layanan.

InternetConnect menggunakan handel HINTERNET akar yang dibuat oleh InternetOpen untuk membuat handel sesi. Jika bendera INTERNET_FLAG_ASYNC diatur dalam panggilan ke InternetBuka, panggilan ke InternetConnect harus menyertakan nilai konteks bukan nol.

Nama server dapat berisi nama host (misalnya, "www.servername.com") atau nomor IP situs dalam format desimal putus-putus ASCII (misalnya, "10.0.1.45").

Port server adalah nomor port Protokol Kendali Transmisi/Protokol Internet (TCP/IP) untuk disambungkan pada server. InternetConnect menggunakan port default untuk tipe layanan yang dipilih jika nilai INTERNET_INVALID_PORT_NUMBER digunakan. Tabel berikut berisi default port server untuk WinINet.

Nilai Makna
INTERNET_DEFAULT_FTP_PORT Gunakan port default untuk server ftp (port 21).
INTERNET_DEFAULT_GOPHER_PORT Gunakan port default untuk server gopher (port 70). Catatan: Windows XP dan Windows Server 2003 R2 dan yang lebih lama saja.
INTERNET_DEFAULT_HTTP_PORT Gunakan port default untuk server http (port 80).
INTERNET_DEFAULT_HTTPS_PORT Gunakan port default untuk server https (port 443).
INTERNET_DEFAULT_SOCKS_PORT Gunakan port default untuk server firewall SOCKS (port 1080).

Menentukan Nama Pengguna dan Kata Sandi

Nilai lpszUsername adalah alamat string yang dihentikan null yang berisi nama pengguna yang masuk. Jika parameter ini NULL, fungsi menggunakan default yang sesuai, kecuali untuk HTTP. Parameter NULL di HTTP menyebabkan server mengembalikan kesalahan. Untuk protokol FTP, defaultnya adalah anonim.

Nilai lpszPassword adalah alamat string yang dihentikan null yang berisi kata sandi masuk. Jika lpszUsername dan lpszPassword adalah NULL, fungsi ini menggunakan kata sandi anonim default. Dalam kasus FTP, kata sandi anonim default adalah nama email pengguna. Jika lpszUsername bukan NULL dan lpszPassword adalah NULL, fungsi ini menggunakan kata sandi kosong. Ada empat kemungkinan pengaturan lpszUsername dan lpszPassword, yang menghasilkan perilaku yang ditunjukkan dalam tabel berikut.

lpszUsername lpszPassword Nama pengguna dikirim ke server FTP Kata sandi dikirim ke server FTP
NULL NULL "anonim" Nama email pengguna
String non-NULL NULL lpszUsername ""
NULL String non-NULL KESALAHAN KESALAHAN
String non-NULL String non-NULL lpszUsername lpszPassword

Informasi ini dapat diubah dengan menggunakan fungsi InternetSetOption dan InternetErrorDlg . InternetSetOption mengubah nilai nama pengguna dan kata sandi, sementara InternetErrorDlg menampilkan kotak dialog yang meminta nama pengguna dan kata sandi yang tepat.

Menentukan Sesi

Untuk menentukan sesi yang sedang dibuat, atur jenis layanan, bendera, dan nilai konteks untuk InternetConnect.

Ada dua jenis layanan yang tersedia untuk InternetConnect: INTERNET_SERVICE_FTP dan INTERNET_SERVICE_HTTP. INTERNET_SERVICE_HTTP digunakan untuk sesi HTTP dan HTTPS.

INTERNET_FLAG_PASSIVE adalah satu-satunya bendera khusus layanan yang digunakan oleh fungsi WinINet. Bendera ini dapat diatur ketika jenis layanan INTERNET_SERVICE_FTP untuk menggunakan semantik FTP pasif.

Untuk semua operasi sinkron, nilai dwContext harus diatur ke nol. Jika operasi asinkron dibuat dengan mengatur bendera INTERNET_FLAG_ASYNC dalam panggilan ke InternetBuka, nilai bukan nol harus disediakan untuk dwContext. Untuk informasi selengkapnya tentang operasi asinkron, lihat Menyiapkan Operasi Asinkron.

Untuk sesi FTP, InternetConnect mencoba membuat koneksi ke server di Internet. Untuk sesi HTTP, InternetConnect tidak membuat koneksi sampai fungsi lain mencoba mendapatkan informasi dari server.

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).