WinHttpReceiveResponse-Funktion (winhttp.h)
Die WinHttpReceiveResponse-Funktion wartet auf den Empfang der Antwort auf eine http-Anforderung, die von WinHttpSendRequest initiiert wurde. Wenn WinHttpReceiveResponse erfolgreich abgeschlossen wurde, wurden die status Code- und Antwortheader empfangen und stehen der Anwendung zur Überprüfung mithilfe von WinHttpQueryHeaders zur Verfügung. Eine Anwendung muss WinHttpReceiveResponse aufrufen, bevor winHttpQueryDataAvailable und WinHttpReadData für den Zugriff auf den Antwortentitätstext (sofern vorhanden) verwendet werden kann.
Syntax
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
Parameter
[in] hRequest
HINTERNET-Handle , das von WinHttpOpenRequest zurückgegeben und von WinHttpSendRequest gesendet wird. Warten Sie, bis WinHttpSendRequest für dieses Handle abgeschlossen ist, bevor Sie WinHttpReceiveResponse aufrufen.
[in] lpReserved
Dieser Parameter ist reserviert und muss NULL sein.
Rückgabewert
Gibt TRUE zurück, wenn erfolgreich, andernfalls FALSE . Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten. Zu den zurückgegebenen Fehlercodes gehören die folgenden.
Fehlercode | BESCHREIBUNG |
---|---|
|
Wird zurückgegeben, wenn die Verbindung mit dem Server fehlgeschlagen ist. |
|
Wird zurückgegeben, wenn während der Analyse der blockierten Codierung eine Überlaufbedingung auftritt. |
|
Wird zurückgegeben, wenn der Server die Clientauthentifizierung anfordert. |
|
Die Verbindung mit dem Server wurde zurückgesetzt oder beendet, oder es wurde ein inkompatibles SSL-Protokoll gefunden. Beispielsweise unterstützt WinHTTP Version 5.1 SSL2 nur, wenn der Client dies ausdrücklich aktiviert. |
|
Wird zurückgegeben, wenn eine größere Anzahl von Headern in einer Antwort vorhanden war, als WinHTTP empfangen konnte. |
|
Wird von WinHttpReceiveResponse zurückgegeben, wenn die Größe der empfangenen Header den Grenzwert für das Anforderungshandle überschreitet. |
|
Der angeforderte Vorgang kann nicht ausgeführt werden, da sich das angegebene Handle nicht im richtigen Zustand befindet. |
|
Der Typ des angegebenen Handles ist für diesen Vorgang falsch. |
|
Ein interner Fehler ist aufgetreten. |
|
Die Serverantwort konnte nicht analysiert werden. |
|
Die URL ist ungültig. |
|
Fehler beim Anmeldeversuch. Wenn dieser Fehler auftritt, sollte das Anforderungshandle mit WinHttpCloseHandle geschlossen werden. Ein neues Anforderungshandle muss erstellt werden, bevor die Funktion wiederholt wird, die diesen Fehler ursprünglich verursacht hat. |
|
Der Servername konnte nicht aufgelöst werden. |
|
Der Vorgang wurde abgebrochen, in der Regel, weil das Handle, für das die Anforderung ausgeführt wurde, vor Abschluss des Vorgangs geschlossen wurde. |
|
Die Umleitung ist fehlgeschlagen, weil sich entweder das Schema geändert hat oder alle Umleitungsversuche fehlgeschlagen sind (Standardwert sind fünf Versuche). |
|
Fehler bei der WinHTTP-Funktion. Die gewünschte Funktion kann mit dem gleichen Anforderungshandle wiederholt werden. |
|
Wird zurückgegeben, wenn eine eingehende Antwort ein internes WinHTTP-Größenlimit überschreitet. |
|
Mindestens ein Fehler wurde in dem SSL-Zertifikat (Secure Sockets Layer) gefunden, das vom Server gesendet wurde. Um zu ermitteln, welche Art von Fehler aufgetreten ist, suchen Sie in einer status Rückruffunktion nach einer WINHTTP_CALLBACK_STATUS_SECURE_FAILURE-Benachrichtigung. Weitere Informationen finden Sie unter WINHTTP_STATUS_CALLBACK. |
|
Timeout für die Anforderung. |
|
Die URL hat ein anderes Schema als "http:" oder "https:" angegeben. |
|
Es war nicht genügend Arbeitsspeicher verfügbar, um den angeforderten Vorgang abzuschließen. (Windows-Fehlercode) |
Hinweise
Auch wenn WinHTTP im asynchronen Modus verwendet wird (d. h. wenn WINHTTP_FLAG_ASYNC in WinHttpOpen festgelegt wurde), kann diese Funktion entweder synchron oder asynchron ausgeführt werden. Wenn diese Funktion FALSE zurückgibt, ist bei dieser Funktion ein Fehler aufgetreten, und Sie können GetLastError aufrufen, um erweiterte Fehlerinformationen zu erhalten. Wenn diese Funktion TRUE zurückgibt, sollte die Anwendung entweder den WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE Abschlussrückruf erwarten, der den Erfolg angibt, oder den WINHTTP_CALLBACK_STATUS_REQUEST_ERROR Abschlussrückruf, der angibt, dass der Vorgang asynchron abgeschlossen wurde, aber fehlgeschlagen ist.
Wenn eine status Rückruffunktion mit WinHttpSetStatusCallback installiert wurde, zeigen die Benachrichtigungen der folgenden Benachrichtigungen, die im dwNotificationFlags-Parameter von WinHttpSetStatusCallback festgelegt wurden, den Fortschritt beim Empfang der Antwort an:
- 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
Beispiele
Dieses Beispiel zeigt Code, der Daten auf einen HTTP-Server schreibt. Der im Beispiel angegebene Servername www.wingtiptoys.com ist fiktiv und muss durch den Namen eines Servers ersetzt werden, für den Sie Schreibzugriff haben.
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);
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP, Windows 2000 Professional mit SP3 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003, Windows 2000 Server mit SP3 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winhttp.h |
Bibliothek | Winhttp.lib |
DLL | Winhttp.dll |
Verteilbare Komponente | WinHTTP 5.0 und Internet Explorer 5.01 oder höher unter Windows XP und Windows 2000. |