Bagikan melalui


Mengaktifkan Fungsionalitas Internet

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

Gunakan fungsiInternetCheckConnection untuk memeriksa koneksi ke Internet. Ini mencoba melakukan ping ke server yang ditentukan oleh URL yang diteruskan ke fungsi. Jika flag FLAG_ICC_FORCE_CONNECTION diaktifkan dan URL adalah NULL, fungsi memeriksa apakah ada entri dalam database server untuk server terdekat. Jika server tersebut ada, fungsi akan melakukan ping pada server itu.

Selanjutnya, gunakan fungsi InternetOpen untuk menentukan karakteristik koneksi Internet yang digunakan aplikasi klien. InternetOpen membuat peganganHINTERNETroot yang digunakan untuk membuat sesihttp ftp. InternetOpen tidak menguji koneksi ke Internet untuk memverifikasi bahwa karakteristik yang diberikan kepada fungsi sudah benar.

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

Menggunakan InternetOpen

Untuk mengaktifkan koneksi ke Internet, pegangan HINTERNET harus dibuat dengan menggunakan InternetOpen. Informasi tentang user agent (aplikasi yang memanggil fungsi internet), jenis akses ke internet, nama proxy, host dan alamat yang melewati proxy, serta perilaku diteruskan ke InternetOpen.

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 Tipe Akses

InternetOpen mendukung tiga jenis akses:

  • Gunakan INTERNET_OPEN_TYPE_DIRECT jika sistem tempat aplikasi berjalan menggunakan koneksi langsung ke Internet. Parameter lpszProxyName dan lpszProxyBypass dari InternetOpen tidak digunakan dan sebaiknya diatur menjadi 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 ProxyServer dan informasi 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 (khusus 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 lpszProxyName InternetOpen 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 other.

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 "proxy", yang beroperasi pada 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 perlu menentukan nama protokol jika menggunakan lebih dari satu protokol per handle yang dikembalikan oleh InternetOpen.

Mencantumkan Bypass Proksi

Nama host atau alamat IP yang seharusnya tidak dikirim ke proksi dapat dicantumkan dalam daftar bypass proksi. Daftar ini dapat berisi simbol pengganti, "*", yang mengakibatkan aplikasi melewatkan server proksi bagi alamat yang cocok dengan pola yang ditentukan. Untuk mencantumkan beberapa alamat dan nama host, pisahkan dengan titik koma di dalam pernyataan pengabaian proksi. Jika makro "<local>" ditentukan, fungsi mengabaikan proksi untuk setiap nama host 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 pengecualian proksi menggunakan makro "<-loopback>".

Contoh berikut menunjukkan panggilan ke InternetOpen menggunakan string bypass proksi yang berbeda. Komentar di atas setiap pemanggilan menjelaskan efek yang ditimbulkan oleh string bypass pada nama-nama host yang diakses dari handle HINTERNET yang dibuat.

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 mengatur alamat server, nomor port, nama pengguna, kata sandi, dan jenis layanan.

InternetConnect menggunakan handelHINTERNETroot yang dibuat oleh InternetBuka untuk membuat handel sesi. Jika flag INTERNET_FLAG_ASYNC diatur dalam panggilan ke InternetOpen, panggilan ke InternetConnect harus menyertakan nilai konteks yang tidak nol.

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

Port server adalah nomor port Protokol Kontrol Transmisi/Protokol Internet (TCP/IP) untuk tersambung ke server. InternetConnect menggunakan port default untuk jenis layanan yang dipilih jika nilai INTERNET_INVALID_PORT_NUMBER digunakan. Tabel berikut berisi default port server untuk WinINet.

Nilai Arti
INTERNET_DEFAULT_FTP_PORT Gunakan port default untuk server ftp (port 21).
INTERNET_DEFAULT_GOPHER_PORT (Port Default Gopher Internet) Gunakan port default untuk server gopher (port 70). Catatan: Windows XP dan Windows Server 2003 R2 dan versi sebelumnya 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 dari lpszUsername adalah alamat dari string yang berakhir dengan nullyang berisi nama pengguna yang log 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 nullyang dihentikan yang berisi kata sandi masuk. Jika lpszUsername dan lpszPassword bernilai NULL, fungsi menggunakan kata sandi anonim default. Dalam kasus FTP, kata sandi anonim default adalah nama email pengguna. Jika lpszUsername tidak NULL dan lpszPassword NULL, fungsi menggunakan kata sandi kosong. Ada empat kemungkinan pengaturan lpszUsername dan lpszPassword, yang menghasilkan perilaku yang ditunjukkan dalam tabel berikut.

NamaPengguna_lpsz lpszPassword Nama pengguna yang dikirim ke server FTP Kata sandi yang dikirim ke server FTP
NULL NULL "anonim" Nama email pengguna
Bukan-NULL teks NULL lpszUsername ""
NULL Non-NULL string KESALAHAN KESALAHAN
Non-string NULL Non-NULL string 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. Pengaturan ini dapat dilakukan ketika jenis layanan adalah INTERNET_SERVICE_FTP untuk menggunakan mode FTP pasif.

Untuk semua operasi sinkron, nilai dwContext harus diatur ke nol. Jika operasi asinkron ditetapkan dengan menetapkan bendera INTERNET_FLAG_ASYNC saat memanggil InternetOpen, 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.

Nota

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