Freigeben über


HttpReceiveHttpRequest-Funktion (http.h)

Die HttpReceiveHttpRequest-Funktion ruft die nächste verfügbare HTTP-Anforderung entweder synchron oder asynchron aus der angegebenen Anforderungswarteschlange ab.

Syntax

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

Ein Handle für die Anforderungswarteschlange, aus der die nächste verfügbare Anforderung abgerufen werden soll. Eine Anforderungswarteschlange wird erstellt, und ihr Handle wird durch einen Aufruf der HttpCreateRequestQueue-Funktion zurückgegeben.

Windows Server 2003 mit SP1 und Windows XP mit SP2: Das Handle für die Anforderungswarteschlange wird von der HttpCreateHttpHandle-Funktion erstellt.

[in] RequestId

Beim ersten Aufruf zum Abrufen einer Anforderung sollte dieser Parameter HTTP_NULL_ID werden. Wenn dann mehr als ein Aufruf erforderlich ist, um die gesamte Anforderung abzurufen, können HttpReceiveHttpRequest oder HttpReceiveRequestEntityBody aufgerufen werden, wobei RequestID auf den Wert festgelegt ist, der im RequestId-Member der HTTP_REQUEST Struktur zurückgegeben wird, auf die pRequestBuffer verweist.

[in] Flags

Ein Parameter, der einer der folgenden Werte sein kann.

Wert Bedeutung
0 (Null)
Es werden nur die Anforderungsheader abgerufen. der Entitätstext wird nicht kopiert.
HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY
Der verfügbare Entitätstext wird zusammen mit den Anforderungsheadern kopiert. Das pEntityChunks-Element der HTTP_REQUEST-Struktur zeigt auf den Entitätstext.
HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY
Alle Entitätstexte werden zusammen mit den Anforderungsheadern kopiert. Das pEntityChunks-Element der HTTP_REQUEST-Struktur zeigt auf den Entitätstext.

[out] RequestBuffer

Ein Zeiger auf einen Puffer, in den die Funktion eine HTTP_REQUEST Struktur und Entitätstext für die HTTP-Anforderung kopiert. HTTP_REQUEST. RequestId enthält den Bezeichner für diese HTTP-Anforderung, den die Anwendung in nachfolgenden Aufrufen von HttpReceiveRequestEntityBody, HttpSendHttpResponse oder HttpSendResponseEntityBody verwenden kann.

[in] RequestBufferLength

Größe des pRequestBuffer-Puffers in Bytes.

[out, optional] BytesReturned

Optional. Ein Zeiger auf eine Variable, die die Größe des Entitätstexts oder des verbleibenden Teils des Entitätstexts in Bytes empfängt.

Wenn Sie einen asynchronen Aufruf mithilfe von pOverlapped ausführen, legen Sie pBytesReceived auf NULL fest. Andernfalls muss pBytesReceived eine gültige Speicheradresse enthalten und nicht auf NULL festgelegt werden, wenn pOverlapped auf NULL festgelegt ist.

[in, optional] Overlapped

Legen Sie bei asynchronen Aufrufen pOverlapped so fest, dass er auf eine OVERLAPPED-Struktur verweist. Legen Sie für synchrone Aufrufe auf NULL fest.

Ein synchroner Aufruf blockiert, bis eine Anforderung in der angegebenen Warteschlange eingetroffen ist und ein Teil oder alles abgerufen wurde, während ein asynchroner Aufruf sofort ERROR_IO_PENDING zurückgibt und die aufrufende Anwendung dann GetOverlappedResult - oder E/A-Vervollständigungsports verwendet, um zu bestimmen, wann der Vorgang abgeschlossen ist. Weitere Informationen zur Verwendung von OVERLAPPED-Strukturen für die Synchronisierung finden Sie unter
Synchronisierung und überlappende Eingabe und Ausgabe.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.

Wenn die Funktion asynchron verwendet wird, gibt ein Rückgabewert von ERROR_IO_PENDING an, dass die nächste Anforderung noch nicht bereit ist und später über normale überlappende E/A-Vervollständigungsmechanismen abgerufen wird.

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.

Wert Bedeutung
ERROR_INVALID_PARAMETER
Mindestens einer der angegebenen Parameter ist in einer nicht verwendbaren Form.
ERROR_NOACCESS
Mindestens ein parameter verweist auf einen ungültigen oder nicht ausgerichteten Speicherpuffer. Der pRequestBuffer-Parameter muss auf einen gültigen Speicherpuffer mit einer Speicherausrichtung verweisen, die der Speicherausrichtungsanforderung für eine HTTP_REQUEST-Struktur entspricht.
ERROR_MORE_DATA
Der Wert von RequestBufferLength ist größer oder gleich der Größe des empfangenen Anforderungsheaders, ist aber nicht so groß wie die kombinierte Größe der Anforderungsstruktur und des Entitätstexts. Die zum Lesen des restlichen Teils des Entitätstexts erforderliche Puffergröße wird im pBytesReceived-Parameter zurückgegeben, wenn dieser nicht NULL ist und wenn der Aufruf synchron ist. Rufen Sie die Funktion erneut mit einem ausreichend großen Puffer auf, um alle Daten abzurufen.
ERROR_HANDLE_EOF
Die angegebene Anforderung wurde bereits vollständig abgerufen. in diesem Fall ist der Wert, auf den pBytesReceived verweist, nicht aussagekräftig, und pRequestBuffer sollte nicht untersucht werden.
Andere
Ein in WinError.h definierter Systemfehlercode .

Hinweise

Mehrere Aufrufe können erforderlich sein, um eine bestimmte Anforderung abzurufen. Wenn der Flags-Parameter beispielsweise auf Null festgelegt ist, kopiert HttpReceiveHttpRequest nur die Anforderungsheaderstruktur in den Puffer und versucht nicht, den Entitätstext zu kopieren. In diesem Fall kann die HttpReceiveRequestEntityBody-Funktion verwendet werden, um den Entitätstext abzurufen, oder ein zweiter Aufruf von HttpReceiveHttpRequest.

Alternativ kann der von der Anwendung bereitgestellte Puffer nicht ausreichend groß sein, um die Anforderung ganz oder teilweise zu empfangen. Um sicherzustellen, dass mindestens ein Teil der Anforderung empfangen wird, wird empfohlen, dass eine Anwendung mindestens einen Puffer von 4 KB bereitstellt, der die meisten HTTP-Anforderungen erfüllt. Alternativ können Authentifizierungsheader, die als unbekannte Header analysiert werden, bis zu 12 KB dazu addieren, sodass bei Verwendung der Authentifizierung/Autorisierung eine Puffergröße von mindestens 16 KB empfohlen wird.

Wenn HttpReceiveHttpRequestERROR_MORE_DATA zurückgibt, führt die Anwendung weitere Aufrufe aus, wobei die Anforderung in jedem weiteren Aufruf durch Übergeben des HTTP_REQUEST identifiziert wird. RequestId-Wert , der vom ersten Aufruf zurückgegeben wird, bis ERROR_HANDLE_EOF zurückgegeben wird.

Hinweis Die Anwendung muss alle relevanten Anforderungsheader untersuchen, einschließlich Inhaltsverhandlungsheader, falls verwendet, und die Anforderung muss basierend auf dem Headerinhalt bei Bedarf fehlschlagen. HttpReceiveHttpRequest stellt nur sicher, dass die Headerzeile ordnungsgemäß beendet ist und keine unzulässigen Zeichen enthält.
 

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista, Windows XP mit SP2 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile http.h
Bibliothek Httpapi.lib
DLL Httpapi.dll

Weitere Informationen

Funktionen der HTTP-Server-API, Version 1.0

HTTP_REQUEST

HttpReceiveRequestEntityBody

HttpSendHttpResponse

HttpSendResponseEntityBody