WinHttpSendRequest和ERROR_WINHTTP_RESEND_REQUEST

时间:2017-07-26 15:06:08

标签: c winapi winhttp getlasterror

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

WinHttpSendRequest的文档:

  

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

但来自MSDN的样本(WinHTTP中的身份验证)在WinHttpReceiveResponse之后检查此值。

1 个答案:

答案 0 :(得分:3)

  

但来自MSDN的样本(WinHTTP中的身份验证)会检查此情况   WinHttpReceiveResponse之后的值。

乍一看the sample可能看起来像那样。但是如果仔细观察,如果 <{strong> 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()

结论:该样本符合参考文档。