3

调用 WinHttpSendRequest 后 GetLastError() 是否可以返回 ERROR_WINHTTP_RESEND_REQUEST?

WinHttpSendRequest 的文档:

ERROR_WINHTTP_RESEND_REQUEST
由于重定向或身份验证质询,应用程序必须再次调用 WinHttpSendRequest。Windows Server 2003 SP1、Windows XP SP2 和 Windows 2000:不支持此错误。

但是来自 MSDN(WinHTTP 中的身份验证)的示例会在 WinHttpReceiveResponse 之后检查此值。

4

1 回答 1

4

但是来自 MSDN(WinHTTP 中的身份验证)的示例会在 WinHttpReceiveResponse 之后检查此值。

乍一看,样本可能看起来像这样。但是,如果您仔细观察,该示例实际上会检查是否ERROR_WINHTTP_RESEND_REQUEST失败: WinHttpSendRequest() WinHttpReceiveResponse()

// 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;

如果WinHttpSendRequest()返回FALSE,调用WinHttpReceiveResponse()将被跳过并被GetLastError()检查ERROR_WINHTTP_RESEND_REQUEST。此代码在while循环内,因此该continue语句将导致循环的剩余部分被跳过,因此WinHttpSendRequest()将再次调用。

结论:样品与参考文件相符。

于 2017-07-26T18:34:58.627 回答