Bagikan melalui


Fungsi HttpReceiveHttpRequest (http.h)

Fungsi HttpReceiveHttpRequest mengambil permintaan HTTP berikutnya yang tersedia dari antrean permintaan yang ditentukan baik secara sinkron atau asinkron.

Sintaks

HTTPAPI_LINKAGE ULONG HttpReceiveHttpRequest(
  [in]            HANDLE          RequestQueueHandle,
  [in]            HTTP_REQUEST_ID RequestId,
  [in]            ULONG           Flags,
  [out]           PHTTP_REQUEST   RequestBuffer,
  [in]            ULONG           RequestBufferLength,
  [out, optional] PULONG          BytesReturned,
  [in, optional]  LPOVERLAPPED    Overlapped
);

Parameter

[in] RequestQueueHandle

Handel ke antrean permintaan untuk mengambil permintaan berikutnya yang tersedia. Antrean permintaan dibuat dan handelnya dikembalikan oleh panggilan ke fungsi HttpCreateRequestQueue .

Windows Server 2003 dengan SP1 dan Windows XP dengan SP2: Handel ke antrean permintaan dibuat oleh fungsi HttpCreateHttpHandle .

[in] RequestId

Pada panggilan pertama untuk mengambil permintaan, parameter ini harus HTTP_NULL_ID. Kemudian, jika lebih dari satu panggilan diperlukan untuk mengambil seluruh permintaan, HttpReceiveHttpRequest atau HttpReceiveRequestEntityBody dapat dipanggil dengan RequestID diatur ke nilai yang dikembalikan dalam anggota RequestId dari struktur HTTP_REQUEST yang ditunjukkan oleh pRequestBuffer.

[in] Flags

Parameter yang bisa menjadi salah satu nilai berikut.

Nilai Makna
0 (zero)
Hanya header permintaan yang diambil; isi entitas tidak disalin.
HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY
Isi entitas yang tersedia disalin bersama dengan header permintaan. Anggota pEntityChunks dari struktur HTTP_REQUEST menunjuk ke badan entitas.
HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY
Semua badan entitas disalin bersama dengan header permintaan. Anggota pEntityChunks dari struktur HTTP_REQUEST menunjuk ke badan entitas.

[out] RequestBuffer

Penunjuk ke buffer tempat fungsi menyalin struktur HTTP_REQUEST dan badan entitas untuk permintaan HTTP. HTTP_REQUEST. RequestId berisi pengidentifikasi untuk permintaan HTTP ini, yang dapat digunakan aplikasi dalam panggilan berikutnya HttpReceiveRequestEntityBody, HttpSendHttpResponse, atau HttpSendResponseEntityBody.

[in] RequestBufferLength

Ukuran, dalam byte, dari buffer pRequestBuffer .

[out, optional] BytesReturned

Pilihan. Penunjuk ke variabel yang menerima ukuran, dalam byte, dari isi entitas, atau dari bagian isi entitas yang tersisa.

Saat melakukan panggilan asinkron menggunakan pOverlapped, atur pBytesReceived ke NULL. Jika tidak, ketika pOverlapped diatur ke NULL, pBytesReceived harus berisi alamat memori yang valid, dan tidak diatur ke NULL.

[in, optional] Overlapped

Untuk panggilan asinkron, atur pOverlapped untuk menunjuk ke struktur yang TUMPANG TINDIH ; untuk panggilan sinkron, atur ke NULL.

Panggilan sinkron memblokir hingga permintaan tiba dalam antrean yang ditentukan dan beberapa atau semua panggilan telah diambil, sedangkan panggilan asinkron segera mengembalikan ERROR_IO_PENDING dan aplikasi panggilan kemudian menggunakan port penyelesaian GetOverlappedResult atau I/O untuk menentukan kapan operasi selesai. Untuk informasi selengkapnya tentang menggunakan struktur yang TUMPANG TINDIH untuk sinkronisasi, lihat
Sinkronisasi dan Input dan Output yang Tumpang Tindih.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah NO_ERROR.

Jika fungsi sedang digunakan secara asinkron, nilai pengembalian ERROR_IO_PENDING menunjukkan bahwa permintaan berikutnya belum siap dan akan diambil nanti melalui mekanisme penyelesaian I/O yang tumpang tindih normal.

Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.

Nilai Makna
ERROR_INVALID_PARAMETER
Satu atau beberapa parameter yang disediakan dalam bentuk yang tidak dapat digunakan.
ERROR_NOACCESS
Satu atau beberapa parameter yang disediakan menunjuk ke buffer memori yang tidak valid atau tidak ditandatangani. Parameter pRequestBuffer harus menunjuk ke buffer memori yang valid dengan perataan memori yang sama atau lebih besar dengan persyaratan perataan memori untuk struktur HTTP_REQUEST .
ERROR_MORE_DATA
Nilai RequestBufferLength lebih besar dari atau sama dengan ukuran header permintaan yang diterima, tetapi tidak sebesar ukuran gabungan struktur permintaan dan badan entitas. Ukuran buffer yang diperlukan untuk membaca bagian isi entitas yang tersisa dikembalikan dalam parameter pBytesReceived jika ini bukan NULL dan jika panggilan sinkron. Panggil fungsi lagi dengan buffer yang cukup besar untuk mengambil semua data.
ERROR_HANDLE_EOF
Permintaan yang ditentukan telah diambil sepenuhnya; dalam hal ini, nilai yang ditujukan oleh pBytesReceived tidak bermakna, dan pRequestBuffer tidak boleh diperiksa.
Lainnya
Kode kesalahan sistem yang ditentukan dalam WinError.h.

Keterangan

Lebih dari satu panggilan dapat diperlukan untuk mengambil permintaan tertentu. Saat parameter Bendera diatur ke nol, misalnya, HttpReceiveHttpRequest hanya menyalin struktur header permintaan ke dalam buffer, dan tidak mencoba menyalin salah satu isi entitas. Dalam hal ini, fungsi HttpReceiveRequestEntityBody dapat digunakan untuk mengambil isi entitas, atau panggilan kedua dapat dilakukan ke HttpReceiveHttpRequest.

Atau, buffer yang disediakan oleh aplikasi mungkin tidak cukup besar untuk menerima semua atau sebagian permintaan. Untuk memastikan menerima setidaknya sebagian dari permintaan, disarankan agar aplikasi menyediakan setidaknya buffer 4 KB, yang mengakomodasi sebagian besar permintaan HTTP. Secara bergantian, header autentikasi, diurai sebagai header yang tidak diketahui, dapat menambahkan hingga 12 KB ke dalamnya, jadi jika autentikasi/otorisasi digunakan, ukuran buffer setidaknya 16 KB direkomendasikan.

Jika HttpReceiveHttpRequest mengembalikan ERROR_MORE_DATA, aplikasi terus melakukan panggilan tambahan, mengidentifikasi permintaan di setiap panggilan tambahan dengan meneruskan HTTP_REQUEST. Nilai RequestId yang dikembalikan oleh panggilan pertama hingga ERROR_HANDLE_EOF dikembalikan.

Catatan Aplikasi harus memeriksa semua header permintaan yang relevan, termasuk header negosiasi konten jika digunakan, dan gagal permintaan yang sesuai berdasarkan konten header. HttpReceiveHttpRequest memastikan hanya bahwa baris header dihentikan dengan benar dan tidak berisi karakter ilegal.
 

Persyaratan

   
Klien minimum yang didukung Windows Vista, Windows XP dengan SP2 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header http.h
Pustaka Httpapi.lib
DLL Httpapi.dll

Lihat juga

Fungsi HTTP Server API Versi 1.0

HTTP_REQUEST

HttpReceiveRequestEntityBody

HttpSendHttpResponse

HttpSendResponseEntityBody