WINHTTP_STATUS_CALLBACK fungsi panggilan balik (winhttp.h)
Jenis WINHTTP_STATUS_CALLBACK mewakili fungsi panggilan balik status yang ditentukan aplikasi.
Sintaks
WINHTTP_STATUS_CALLBACK WinhttpStatusCallback;
void WinhttpStatusCallback(
[in] HINTERNET hInternet,
[in] DWORD_PTR dwContext,
[in] DWORD dwInternetStatus,
[in] LPVOID lpvStatusInformation,
[in] DWORD dwStatusInformationLength
)
{...}
Parameter
[in] hInternet
Handel yang fungsi panggilan baliknya dipanggil.
[in] dwContext
Penunjuk ke DWORD yang menentukan nilai konteks yang ditentukan aplikasi yang terkait dengan handel dalam parameter hInternet .
Nilai konteks dapat ditetapkan ke handel Sesi, Sambungkan, atau Minta dengan memanggil WinHttpSetOption dengan opsi WINHTTP_OPTION_CONTEXT_VALUE . Atau, WinHttpSendRequest dapat digunakan untuk mengaitkan nilai konteks dengan handel Permintaan.
[in] dwInternetStatus
Menunjuk ke DWORD yang menentukan kode status yang menunjukkan mengapa fungsi panggilan balik dipanggil. Ini bisa menjadi salah satu nilai berikut:
WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
Menutup koneksi ke server. Parameter lpvStatusInformation adalah NULL.
WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER
Berhasil tersambung ke server. Parameter lpvStatusInformation berisi penunjuk ke LPWSTR yang menunjukkan alamat IP server dalam notasi putus-putus.
WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER
Menyambungkan ke server. Parameter lpvStatusInformation berisi penunjuk ke LPWSTR yang menunjukkan alamat IP server dalam notasi putus-putus.
WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Berhasil menutup koneksi ke server. Parameter lpvStatusInformation adalah NULL.
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
Data tersedia untuk diambil dengan WinHttpReadData. Parameter lpvStatusInformation menunjuk ke DWORD yang berisi jumlah byte data yang tersedia. Parameter dwStatusInformationLength itu sendiri adalah 4 (ukuran DWORD).
WINHTTP_CALLBACK_STATUS_HANDLE_CREATED
Handel HINTERNET telah dibuat. Parameter lpvStatusInformation berisi penunjuk ke handel HINTERNET .
WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING
Nilai handel ini telah dihentikan. Parameter lpvStatusInformation berisi penunjuk ke handel HINTERNET . Tidak akan ada lagi panggilan balik untuk handel ini.
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
Header respons telah diterima dan tersedia dengan WinHttpQueryHeaders. Parameter lpvStatusInformation adalah NULL.
WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
Menerima pesan kode status menengah (tingkat 100) dari server. Parameter lpvStatusInformation berisi penunjuk ke DWORD yang menunjukkan kode status.
WINHTTP_CALLBACK_STATUS_NAME_RESOLVED
Berhasil menemukan alamat IP server. Parameter lpvStatusInformation berisi penunjuk ke LPWSTR yang menunjukkan nama yang diselesaikan.
WINHTTP_CALLBACK_STATUS_READ_COMPLETE
Data berhasil dibaca dari server. Parameter lpvStatusInformation berisi penunjuk ke buffer yang ditentukan dalam panggilan ke WinHttpReadData. Parameter dwStatusInformationLength berisi jumlah byte yang dibaca.
Saat digunakan oleh WinHttpWebSocketReceive, parameter lpvStatusInformation berisi penunjuk ke struktur WINHTTP_WEB_SOCKET_STATUS , dan parameter dwStatusInformationLength menunjukkan ukuran lpvStatusInformation.
WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
Menunggu server merespons permintaan. Parameter lpvStatusInformation adalah NULL.
WINHTTP_CALLBACK_STATUS_REDIRECT
Permintaan HTTP akan mengalihkan permintaan secara otomatis. Parameter lpvStatusInformation berisi penunjuk ke LPWSTR yang menunjukkan URL baru. Pada titik ini, aplikasi dapat membaca data apa pun yang dikembalikan oleh server dengan respons pengalihan dan dapat mengkueri header respons. Ini juga dapat membatalkan operasi dengan menutup handel.
WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
Terjadi kesalahan saat mengirim permintaan HTTP. Parameter lpvStatusInformation berisi penunjuk ke struktur WINHTTP_ASYNC_RESULT . Anggota dwResult menunjukkan ID fungsi yang disebut dan dwError menunjukkan nilai yang dikembalikan.
WINHTTP_CALLBACK_STATUS_REQUEST_SENT
Berhasil mengirim permintaan informasi ke server. Parameter lpvStatusInformation berisi penunjuk ke DWORD yang menunjukkan jumlah byte yang dikirim.
WINHTTP_CALLBACK_STATUS_RESOLVING_NAME
Mencari alamat IP nama server. Parameter lpvStatusInformation berisi penunjuk ke nama server yang sedang diselesaikan.
WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
Berhasil menerima respons dari server. Parameter lpvStatusInformation berisi penunjuk ke DWORD yang menunjukkan jumlah byte yang diterima.
WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
Satu atau beberapa kesalahan terjadi saat membuat koneksi Aman (HTTPS) ke server. Parameter lpvStatusInformation berisi penunjuk ke DWORD yang merupakan kombinasi bitwise-OR dari nilai kesalahan. Untuk informasi selengkapnya, lihat deskripsi untuk lpvStatusInformation.
WINHTTP_CALLBACK_STATUS_SENDING_REQUEST
Mengirim permintaan informasi ke server. Parameter lpvStatusInformation adalah NULL.
WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
Permintaan berhasil diselesaikan. Parameter lpvStatusInformation adalah nilai lpOptional yang diteruskan ke WinHttpSendRequest (isi permintaan awal), dan parameter dwStatusInformationLength menunjukkan jumlah byte isi awal yang berhasil ditulis (nilai dwOptionalLength yang diteruskan ke WinHttpSendRequest).
WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
Data berhasil ditulis ke server. Parameter lpvStatusInformation berisi pointer ke DWORD yang menunjukkan jumlah byte yang ditulis.
Saat digunakan oleh WinHttpWebSocketSend, parameter lpvStatusInformation berisi penunjuk ke struktur WINHTTP_WEB_SOCKET_STATUS , dan parameter dwStatusInformationLength menunjukkan ukuran lpvStatusInformation.
WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE
Operasi yang dimulai oleh panggilan ke WinHttpGetProxyForUrlEx selesai. Data tersedia untuk diambil dengan WinHttpReadData.
WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE
Koneksi berhasil ditutup melalui panggilan ke WinHttpWebSocketClose. Parameter lpvStatusInformation adalah NULL.
WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE
Koneksi berhasil dimatikan melalui panggilan ke WinHttpWebSocketShutdown. Parameter lpvStatusInformation adalah NULL.
[in] lpvStatusInformation
Penunjuk ke buffer yang menentukan informasi yang berkaitan dengan panggilan ini ke fungsi panggilan balik. Format data ini tergantung pada nilai argumen dwInternetStatus . Untuk informasi selengkapnya, lihat dwInternetStatus.
Jika argumen dwInternetStatus WINHTTP_CALLBACK_STATUS_SECURE_FAILURE, maka lpvStatusInformation menunjuk ke DWORD yang merupakan kombinasi bitwise-OR dari satu atau beberapa nilai berikut.
[in] dwStatusInformationLength
WINHTTP_CALLBACK_STATUS_REDIRECT panggilan balik status memberikan nilai dwStatusInformationLength yang sesuai dengan jumlah karakter LPWSTR yang ditujukkan oleh lpvStatusInformation.
Nilai kembali
Tidak ada
Keterangan
Fungsi panggilan balik harus threadsafe dan masuk kembali karena dapat dipanggil pada utas lain untuk permintaan terpisah, dan masuk kembali pada utas yang sama untuk permintaan saat ini. Oleh karena itu harus dikodekan untuk menangani masuknya kembali dengan aman saat diproses. Ketika parameter dwInternetStatus sama dengan WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, panggilan balik tidak perlu dapat menangani masuknya kembali untuk permintaan yang sama, karena panggilan balik ini dijamin menjadi yang terakhir, dan tidak terjadi ketika pesan lain untuk permintaan ini ditangani.
Fungsi panggilan balik status menerima pembaruan tentang status operasi asinkron melalui bendera pemberitahuan. Pemberitahuan yang menunjukkan operasi tertentu selesai disebut pemberitahuan penyelesaian, atau hanya penyelesaian. Tabel berikut mencantumkan enam bendera penyelesaian dan fungsi terkait yang selesai saat bendera ini diterima.
Bendera penyelesaian | Fungsi |
---|---|
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WinHttpQueryDataAvailable |
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE | WinHttpReceiveResponse |
WINHTTP_CALLBACK_STATUS_READ_COMPLETE | WinHttpReadData |
WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WinHttpsendRequest |
WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WinHttpWriteData |
WINHTTP_CALLBACK_STATUS_REQUEST_ERROR | Salah satu fungsi di atas ketika terjadi kesalahan. |
Karena panggilan balik dilakukan selama pemrosesan permintaan, aplikasi harus menghabiskan waktu sesedikempat mungkin dalam fungsi panggilan balik untuk menghindari penurunan throughput data di jaringan. Misalnya, menampilkan kotak dialog dalam fungsi panggilan balik bisa menjadi operasi panjang sehingga server mengakhiri permintaan.
Fungsi panggilan balik dapat dipanggil dalam konteks utas yang berbeda dari utas yang memulai permintaan.
Demikian pula, tidak ada afinitas utas panggilan balik saat Anda memanggil WinHttp secara asinkron: panggilan mungkin dimulai dari satu utas, tetapi utas lain dapat menerima panggilan balik.
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 |
Redistribusi | WinHTTP 5.0 dan Internet Explorer 5.01 atau yang lebih baru pada Windows XP dan Windows 2000. |