Fungsi WinHttpReceiveResponse (winhttp.h)
Fungsi WinHttpReceiveResponse menunggu untuk menerima respons terhadap permintaan HTTP yang dimulai oleh WinHttpSendRequest. Ketika WinHttpReceiveResponse berhasil diselesaikan, kode status dan header respons telah diterima dan tersedia bagi aplikasi untuk diperiksa menggunakan WinHttpQueryHeaders. Aplikasi harus memanggil WinHttpReceiveResponse sebelum dapat menggunakan WinHttpQueryDataAvailable dan WinHttpReadData untuk mengakses badan entitas respons (jika ada).
Sintaks
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
Parameter
[in] hRequest
Handel HINTERNET dikembalikan oleh WinHttpOpenRequest dan dikirim oleh WinHttpSendRequest. Tunggu hingga WinHttpSendRequest selesai untuk handel ini sebelum memanggil WinHttpReceiveResponse.
[in] lpReserved
Parameter ini dicadangkan dan harus NULL.
Mengembalikan nilai
Mengembalikan TRUE jika berhasil, atau FALSE sebaliknya. Untuk informasi kesalahan yang diperluas, hubungi GetLastError. Di antara kode kesalahan yang dikembalikan adalah sebagai berikut.
Kode Kesalahan | Deskripsi |
---|---|
|
Dikembalikan jika koneksi ke server gagal. |
|
Dikembalikan ketika kondisi luapan ditemui dalam proses penguraian pengodean yang dipotong. |
|
Dikembalikan saat server meminta autentikasi klien. |
|
Koneksi dengan server telah direset atau dihentikan, atau protokol SSL yang tidak kompatibel ditemukan. Misalnya, WinHTTP versi 5.1 tidak mendukung SSL2 kecuali klien secara khusus mengaktifkannya. |
|
Dikembalikan saat jumlah header yang lebih besar ada dalam respons daripada yang bisa diterima WinHTTP. |
|
Dikembalikan oleh WinHttpReceiveResponse saat ukuran header yang diterima melebihi batas handel permintaan. |
|
Operasi yang diminta tidak dapat dilakukan karena handel yang diberikan tidak dalam keadaan benar. |
|
Jenis handel yang disediakan salah untuk operasi ini. |
|
Terjadi kesalah internal. |
|
Respons server tidak dapat diurai. |
|
URL tidak valid. |
|
Upaya masuk gagal. Ketika kesalahan ini ditemui, handel permintaan harus ditutup dengan WinHttpCloseHandle. Handel permintaan baru harus dibuat sebelum mencoba kembali fungsi yang awalnya menghasilkan kesalahan ini. |
|
Nama server tidak dapat diatasi. |
|
Operasi dibatalkan, biasanya karena handel tempat permintaan beroperasi ditutup sebelum operasi selesai. |
|
Pengalihan gagal karena skema berubah atau semua upaya yang dilakukan untuk mengalihkan gagal (defaultnya adalah lima upaya). |
|
Fungsi WinHTTP gagal. Fungsi yang diinginkan dapat dicoba kembali pada handel permintaan yang sama. |
|
Dikembalikan saat respons masuk melebihi batas ukuran WinHTTP internal. |
|
Satu atau beberapa kesalahan ditemukan di sertifikat Secure Sockets Layer (SSL) yang dikirim oleh server. Untuk menentukan jenis kesalahan apa yang ditemui, periksa pemberitahuan WINHTTP_CALLBACK_STATUS_SECURE_FAILURE dalam fungsi panggilan balik status. Untuk informasi selengkapnya, lihat WINHTTP_STATUS_CALLBACK. |
|
Waktu permintaan habis. |
|
URL menentukan skema selain "http:" atau "https:". |
|
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 dapat beroperasi baik secara sinkron atau asinkron. Jika fungsi ini mengembalikan FALSE, fungsi ini gagal dan Anda dapat memanggil GetLastError untuk mendapatkan informasi kesalahan yang diperluas. Jika fungsi ini mengembalikan TRUE, aplikasi harus mengharapkan panggilan balik penyelesaian WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE , menunjukkan keberhasilan, atau panggilan balik penyelesaian WINHTTP_CALLBACK_STATUS_REQUEST_ERROR , menunjukkan bahwa operasi selesai secara asinkron, tetapi gagal.
Jika fungsi panggilan balik status telah diinstal dengan WinHttpSetStatusCallback, maka pemberitahuan berikut yang telah diatur dalam parameter dwNotificationFlags dari WinHttpSetStatusCallback menunjukkan kemajuan dalam menerima respons:
- WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
- WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
- WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
- WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
- WINHTTP_CALLBACK_STATUS_REDIRECT
- WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
- WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Contoh
Contoh ini menunjukkan kode yang menulis data ke server HTTP. Nama server yang disediakan dalam contoh, www.wingtiptoys.com, fiktif dan harus diganti dengan nama server tempat Anda memiliki akses tulis.
LPSTR pszData = "WinHttpWriteData Example";
DWORD dwBytesWritten = 0;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"A WinHTTP Example Program/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.wingtiptoys.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
// Create an HTTP Request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"PUT",
L"/writetst.txt",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a Request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
(DWORD)strlen(pszData), 0);
// Write data to the server.
if (bResults)
bResults = WinHttpWriteData( hRequest, pszData,
(DWORD)strlen(pszData),
&dwBytesWritten);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// 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 pada Windows XP dan Windows 2000. |