2017-07-26 3 views
2

Kann GetLastError() ERROR_WINHTTP_RESEND_REQUEST nach Aufruf von WinHttpSendRequest zurückgeben?WinHttpSendRequest und ERROR_WINHTTP_RESEND_REQUEST

Dokumentation für WinHttpSendRequest:

ERROR_WINHTTP_RESEND_REQUEST
Der Antrag muss WinHttpSendRequest erneut aufgrund einer Umleitung oder Authentifizierung Herausforderung nennen. Windows Server 2003 mit SP1, Windows XP mit SP2 und Windows 2000: Dieser Fehler wird nicht unterstützt.

Aber Proben von MSDN (Authentifizierung in WinHTTP) überprüft diesen Wert nach WinHttpReceiveResponse.

+0

Sie beziehen sich wahrscheinlich auf das Beispiel auf [diese Seite] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383144 (v = vs.85) .aspx). Schau nochmal auf den Code. Die Prüfung auf 'ERROR_WINHTTP_RESEND_REQUEST' erfolgt, wenn 'WinHttpSendRequest()' oder 'WinHttpReceiveResponse()' fehlschlägt. – zett42

Antwort

3

Aber Proben von MSDN (Authentifizierung in WinHTTP) prüft, ob dieser Wert nach WinHttpReceiveResponse.

Auf den ersten Blick the sample kann so aussehen. Aber wenn man genau hinschaut, prüft die Probe tatsächlich für ERROR_WINHTTP_RESEND_REQUEST wenn entwederWinHttpSendRequest()oderWinHttpReceiveResponse() versagt:

// Send a request. 
bResults = WinHttpSendRequest(hRequest, 
           WINHTTP_NO_ADDITIONAL_HEADERS, 
           0, 
           WINHTTP_NO_REQUEST_DATA, 
           0, 
           0, 
           0); 

// End the request. 
if(bResults) 
    bResults = WinHttpReceiveResponse(hRequest, NULL); 

// Resend the request in case of 
// ERROR_WINHTTP_RESEND_REQUEST error. 
if(!bResults && GetLastError() == ERROR_WINHTTP_RESEND_REQUEST) 
    continue; 

Wenn WinHttpSendRequest() kehrt FALSE, wird der Anruf zu WinHttpReceiveResponse() sprungen und GetLastError() für ERROR_WINHTTP_RESEND_REQUEST geprüft werden. Dieser Code befindet sich in einer while-Schleife, sodass die continue-Anweisung dazu führt, dass der verbleibende Teil der Schleife übersprungen wird, sodass WinHttpSendRequest() erneut aufgerufen wird.

Schlussfolgerung: Die Probe stimmt mit der Referenzdokumentation überein.