Fungsi WinHttpConnect (winhttp.h)
Fungsi WinHttpConnect menentukan server target awal permintaan HTTP dan mengembalikan handel koneksi HINTERNET ke sesi HTTP untuk target awal tersebut.
Sintaks
WINHTTPAPI HINTERNET WinHttpConnect(
[in] HINTERNET hSession,
[in] LPCWSTR pswzServerName,
[in] INTERNET_PORT nServerPort,
[in] DWORD dwReserved
);
Parameter
[in] hSession
Handel sesi WINHTTP HINTERNET yang valid dikembalikan oleh panggilan sebelumnya ke WinHttpBuka.
[in] pswzServerName
Penunjuk ke string yang dihentikan null yang berisi nama host server HTTP. Sebagai alternatif, string dapat berisi alamat IP situs di ASCII, misalnya, 10.0.1.45. Perhatikan bahwa WinHttp tidak menerima nama host internasional tanpa mengonversinya terlebih dahulu ke Punycode. Untuk informasi selengkapnya, lihat Menangani Nama Domain Internasional (IDN).
[in] nServerPort
Bilangan bulat tidak ditandatangani yang menentukan port TCP/IP pada server tempat koneksi dibuat. Parameter ini dapat berupa nomor port TCP/IP yang valid, atau salah satu nilai berikut.
Nilai | Makna |
---|---|
|
Menggunakan port default untuk server HTTP (port 80). |
|
Menggunakan port default untuk server HTTPS (port 443). Memilih porta ini tidak otomatis membuat sambungan aman. Anda masih harus menentukan penggunaan semantik transaksi aman dengan menggunakan bendera WINHTTP_FLAG_SECURE dengan WinHttpOpenRequest. |
|
Menggunakan port 80 untuk HTTP dan port 443 untuk Secure Hypertext Transfer Protocol (HTTPS). |
[in] dwReserved
Parameter ini dicadangkan dan harus 0.
Nilai kembali
Mengembalikan handel koneksi yang valid ke sesi HTTP jika koneksi berhasil, atau NULL sebaliknya. Untuk mengambil informasi kesalahan yang diperluas, panggil GetLastError. Di antara kode kesalahan yang dikembalikan adalah sebagai berikut.
Kode Kesalahan | Deskripsi |
---|---|
|
Jenis handel yang disediakan salah untuk operasi ini. |
|
Terjadi kesalah internal. |
|
URL tidak valid. |
|
Operasi dibatalkan, biasanya karena handel tempat permintaan beroperasi ditutup sebelum operasi selesai. |
|
Skema URL tidak dapat dikenali, atau tidak didukung. |
|
Dukungan fungsi WinHTTP sedang dimatikan atau dibongkar. |
|
Tidak tersedia cukup memori untuk menyelesaikan operasi yang diminta. (Kode galat Windows) |
Keterangan
Bahkan ketika WinHTTP digunakan dalam mode asinkron (yaitu, ketika WINHTTP_FLAG_ASYNC telah diatur di WinHttpOpen), fungsi ini beroperasi secara sinkron. Nilai yang dikembalikan menunjukkan keberhasilan atau kegagalan. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Setelah aplikasi panggilan selesai menggunakan handel HINTERNET yang dikembalikan oleh WinHttpConnect, aplikasi harus ditutup menggunakan fungsi WinHttpCloseHandle .
WinHttpConnect menentukan server HTTP target, namun respons bisa berasal dari server lain jika permintaan dialihkan. Anda bisa menentukan URL server yang mengirim respons dengan memanggil WinHttpQueryOption dengan bendera WINHTTP_OPTION_URL.
Contoh
Contoh berikut menunjukkan cara menggunakan semantik transaksi aman untuk mengunduh sumber daya dari server HTTPS. Kode sampel menginisialisasi antarmuka pemrograman aplikasi (API) Microsoft Windows HTTP Services (WinHTTP), memilih server HTTPS target, lalu membuka dan mengirim permintaan untuk sumber daya aman ini.
WinHttpQueryDataAvailable digunakan dengan handel permintaan untuk menentukan berapa banyak data yang tersedia untuk diunduh, lalu WinHttpReadData digunakan untuk membaca data tersebut. Proses ini berulang hingga seluruh dokumen diambil dan ditampilkan.
DWORD dwSize = 0;
DWORD dwDownloaded = 0;
LPSTR pszOutBuffer;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, L"www.microsoft.com",
INTERNET_DEFAULT_HTTPS_PORT, 0);
// Create an HTTP request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
WINHTTP_FLAG_SECURE);
// Send a request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
0, 0);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// Keep checking for data until there is nothing left.
if (bResults)
do
{
// Check for available data.
dwSize = 0;
if (!WinHttpQueryDataAvailable( hRequest, &dwSize))
printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());
// Allocate space for the buffer.
pszOutBuffer = new char[dwSize+1];
if (!pszOutBuffer)
{
printf("Out of memory\n");
dwSize=0;
}
else
{
// Read the Data.
ZeroMemory(pszOutBuffer, dwSize+1);
if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,
dwSize, &dwDownloaded))
printf( "Error %u in WinHttpReadData.\n", GetLastError());
else
printf( "%s\n", pszOutBuffer);
// Free the memory allocated to the buffer.
delete [] pszOutBuffer;
}
} while (dwSize > 0);
// Report any errors.
if (!bResults)
printf("Error %d has occurred.\n", GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP, Windows 2000 Professional dengan SP3 [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003, Windows 2000 Server dengan SP3 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winhttp.h |
Pustaka | Winhttp.lib |
DLL | Winhttp.dll |
Redistribusi | WinHTTP 5.0 dan Internet Explorer 5.01 atau yang lebih baru di Windows XP dan Windows 2000. |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk