Bagikan melalui


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
ERROR_WINHTTP_CANNOT_CONNECT
Dikembalikan jika koneksi ke server gagal.
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
Dikembalikan ketika kondisi luapan ditemui dalam proses penguraian pengodean yang dipotong.
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
Dikembalikan saat server meminta autentikasi klien.
ERROR_WINHTTP_CONNECTION_ERROR
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.
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
Dikembalikan saat jumlah header yang lebih besar ada dalam respons daripada yang bisa diterima WinHTTP.
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW
Dikembalikan oleh WinHttpReceiveResponse saat ukuran header yang diterima melebihi batas handel permintaan.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Operasi yang diminta tidak dapat dilakukan karena handel yang diberikan tidak dalam keadaan benar.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Jenis handel yang disediakan salah untuk operasi ini.
ERROR_WINHTTP_INTERNAL_ERROR
Terjadi kesalah internal.
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
Respons server tidak dapat diurai.
ERROR_WINHTTP_INVALID_URL
URL tidak valid.
ERROR_WINHTTP_LOGIN_FAILURE
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.
ERROR_WINHTTP_NAME_NOT_RESOLVED
Nama server tidak dapat diatasi.
ERROR_WINHTTP_OPERATION_CANCELLED
Operasi dibatalkan, biasanya karena handel tempat permintaan beroperasi ditutup sebelum operasi selesai.
ERROR_WINHTTP_REDIRECT_FAILED
Pengalihan gagal karena skema berubah atau semua upaya yang dilakukan untuk mengalihkan gagal (defaultnya adalah lima upaya).
ERROR_WINHTTP_RESEND_REQUEST
Fungsi WinHTTP gagal. Fungsi yang diinginkan dapat dicoba kembali pada handel permintaan yang sama.
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
Dikembalikan saat respons masuk melebihi batas ukuran WinHTTP internal.
ERROR_WINHTTP_SECURE_FAILURE
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.
ERROR_WINHTTP_TIMEOUT
Waktu permintaan habis.
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
URL menentukan skema selain "http:" atau "https:".
ERROR_NOT_ENOUGH_MEMORY
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
Jika server menutup koneksi, pemberitahuan berikut juga akan dilaporkan, asalkan telah diatur dalam parameter dwNotificationFlags dari WinHttpSetStatusCallback:
  • WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
  • WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Catatan Untuk Windows XP dan Windows 2000, lihat bagian Persyaratan Run-Time di halaman mulai WinHttp.
 

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.

Lihat juga

Tentang Microsoft Windows HTTP Services (WinHTTP)

Versi WinHTTP

WinHttpCloseHandle

WinHttpBuka

WinHttpOpenRequest

WinHttpsendRequest