GetLastError()是否可以在调用WinHttpSendRequest后返回ERROR_WINHTTP_RESEND_REQUEST?
WinHttpSendRequest的文档:
ERROR_WINHTTP_RESEND_REQUEST
应用程序必须调用 由于重定向或身份验证,WinHttpSendRequest再次出现 挑战。 Windows Server 2003 SP1,Windows XP SP2和 Windows 2000:不支持此错误。
但来自MSDN的样本(WinHTTP中的身份验证)在WinHttpReceiveResponse之后检查此值。
答案 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()
。
结论:该样本符合参考文档。