本文整理汇总了C++中HttpHeader::authorizationTarget方法的典型用法代码示例。如果您正苦于以下问题:C++ HttpHeader::authorizationTarget方法的具体用法?C++ HttpHeader::authorizationTarget怎么用?C++ HttpHeader::authorizationTarget使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HttpHeader
的用法示例。
在下文中一共展示了HttpHeader::authorizationTarget方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: convertHttpCodeToUpdaterCode
KLUPD::CoreError KLUPD::HttpProtocol::httpRequestAttempt(
const Path &fileNameIn,
const Path &relativeUrlPathIn,
const Address &serverAddressIn, const std::string &userAgent,
const bool useProxy, const Address &proxyAddressIn,
const AuthorizationTypeList &proxyAuthorizationMethods,
const size_t regettingPosition)
{
size_t infiniteRedirectLoop = 0;
Path fileName = fileNameIn;
Path relativeUrlPath = relativeUrlPathIn;
Address serverAddress = serverAddressIn;
Address proxyAddress = proxyAddressIn;
m_regettingPosition = regettingPosition;
// cache for next iteration generate request
// at first attempt the target is not known, but proxy server target is used,
// because of possible protection from client for authorization on server
DownloadProgress::AuthorizationTarget authorizationTarget = DownloadProgress::proxyServer;
////////////////////
// the State flags agains proxies that close connection after authorization switch.
// There are proxies (e.g. Squid/2.4.STABLE7) which deals in next way:
// *** Client -> Server: GET file
// *** Server -> Client: HTTP 407 / Proxy-Connection: keep-alive
// *** Server closes connection
// *** Client -> Server GET 407
//
// Here are 3 flags to track such situations, that previous response is received,
// BUT then server closes connection
bool previousResponseReceived = false;
bool authorizationTypeSwitched = false;
bool requestHasAlreadyBeenRepeated = false;
////////////////////
////////////////////
// in case proxy server requires authorization, but sends incorrect (from HTTP)
// code for authorization failure in next way
// *** Client -> Server: GET file
// *** Server -> Client: HTTP 407 / Proxy-Authorization: NTLM
// *** Client -> Server GET / Proxy-Authorization: NTLM
// *** Server -> Client: HTTP 502 (or 403 or other code)
// *** here is authorization state is forgotten, because 502 request does NOT contain "Proxy-Authorization: NTLM"
// *** Client ask from product new credentials
// *** Client -> Server GET / Proxy-Authorization: NTLM (with new credentials)
bool authorizationWasNeededOnProxy = false;
// it makes no sence to try Ntlm without credentials authorization type,
// because this authorization type does not depend on provided credentials
bool ntlmAuthorizationTriedAlready = false;
int lastHttpCode = 0;
for(size_t protectionAgainstCyclingCounter = 100; protectionAgainstCyclingCounter; --protectionAgainstCyclingCounter)
{
const CoreError connectionResult = setupLowLevelConnectionIfNeed(useProxy, useProxy ? proxyAddress : serverAddress, proxyAuthorizationMethods);
if(connectionResult != CORE_NO_ERROR)
{
TRACE_MESSAGE2("Failed to setup connection to HTTP Server, result '%S'",
toString(connectionResult).toWideChar());
return connectionResult;
}
// make proxy authorization header
std::string proxyAuthorizationHeader;
if(!m_authorizationDriver.makeProxyAuthorizationHeader(proxyAuthorizationHeader)
// we know authorization methods supported by proxy server
|| ((m_authorizationDriver.currentAuthorizationType() == noAuthorization) && !m_authorizationDriver.supportedAuthorizationTypesByServer().empty()))
{
if(!switchAuthorization(fileName, relativeUrlPath, authorizationTarget, proxyAddress,
authorizationTypeSwitched, ntlmAuthorizationTriedAlready))
{
if(lastHttpCode)
return HttpHeader::convertHttpCodeToUpdaterCode(lastHttpCode);
return useProxy ? CORE_PROXY_AUTH_ERROR : CORE_SERVER_AUTH_ERROR;
}
// try other authorization type
continue;
}
HTTPRequestBuilder requestBuilder(m_method);
const std::vector<unsigned char> requestBuffer = requestBuilder.generateRequest(
fileName,
relativeUrlPath,
useProxy,
serverAddress,
userAgent,
proxyAuthorizationHeader,
m_regettingPosition,
m_postData);
TRACE_MESSAGE2("Sending HTTP request\n%s", requestBuilder.toString().c_str());
if(requestBuffer.empty())
//.........这里部分代码省略.........