本文整理汇总了C++中CUrl::GetHostName方法的典型用法代码示例。如果您正苦于以下问题:C++ CUrl::GetHostName方法的具体用法?C++ CUrl::GetHostName怎么用?C++ CUrl::GetHostName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CUrl
的用法示例。
在下文中一共展示了CUrl::GetHostName方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Open
STDMETHODIMP CBHttpRequest::Open(BSTR strMethod, BSTR strUrl, VARIANT_BOOL bAsync, VARIANT varUser, VARIANT varPassword)
{
CUrl url;
CStringA strObject;
CStringA strUser;
CStringA strPassword;
Abort();
s_cs.Enter();
s_dwReqID ++;
m_dwReqID = s_dwReqID;
s_mapReq.SetAt(m_dwReqID, this);
s_cs.Leave();
url.CrackUrl(CBStringA(strUrl));
m_bAsync = (bAsync != VARIANT_FALSE);
strObject = url.GetUrlPath();
strObject.Append(url.GetExtraInfo());
if(varUser.vt != VT_ERROR)
{
HRESULT hr = varGetString(varUser, strUser);
if(FAILED(hr))return hr;
}
if(varPassword.vt != VT_ERROR)
{
HRESULT hr = varGetString(varPassword, strPassword);
if(FAILED(hr))return hr;
}
m_hConnection = InternetConnect(m_hSession, url.GetHostName(), url.GetPortNumber(),
strUser.IsEmpty() ? NULL : (LPCSTR)strUser, strPassword.IsEmpty() ? NULL : (LPCSTR)strPassword,
INTERNET_SERVICE_HTTP, 0, m_dwReqID);
if(m_hConnection == NULL)
return GetErrorResult();
m_hFile = HttpOpenRequest(m_hConnection, CBStringA(strMethod), strObject, NULL, NULL, NULL, m_dwFlags, m_dwReqID);
if(m_hFile == NULL)
return GetErrorResult();
m_eventComplete.Set();
return S_OK;
}
示例2: QueryIAuthenticate
HRESULT WINAPI MonitorSink::QueryIAuthenticate(void* pv, REFIID riid, LPVOID* ppv, DWORD dw)
{
* ppv = NULL;
if ( pv && InlineIsEqualGUID(riid, IID_IAuthenticate) )
{
MonitorSink * pThis = (MonitorSink *)pv;
if ( pThis->m_pIEHostWindow && ! pThis->m_strURL.IsEmpty() && pThis->m_spTargetProtocol )
{
do
{
CComPtr<IWinInetHttpInfo> spWinInetHttpInfo;
if ( FAILED(pThis->m_spTargetProtocol->QueryInterface(&spWinInetHttpInfo)) ) break;
if ( ! spWinInetHttpInfo ) break;
CHAR szRawHeader[8192]; // IWinInetHttpInfo::QueryInfo() 返回的 Raw Header 不是 Unicode 的
DWORD dwBuffSize = ARRAYSIZE(szRawHeader);
if ( FAILED(spWinInetHttpInfo->QueryInfo(HTTP_QUERY_RAW_HEADERS, szRawHeader, &dwBuffSize, 0, NULL)) ) break;
CString strHeader;
HttpRawHeader2CrLfHeader(szRawHeader, strHeader);
static const WCHAR AUTH_HEAD [] = L"\r\nWWW-Authenticate:";
LPWSTR lpAuth = NULL;
size_t nAuthLen = 0;
if ( ! ExtractFieldValue( strHeader, AUTH_HEAD, & lpAuth, & nAuthLen ) ) break;
if ( ! lpAuth ) break;
CString strAuthScheme;
CString strAuthRealm;
// 可能有以下几种情况:
// WWW-Authenticate: Basic realm="Secure Area"
// WWW-Authenticate: Digest realm="[email protected]", qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"
// WWW-Authenticate: NTLM
// WWW-Authenticate: NTLM <auth token>
LPWSTR pPos = StrStrW(lpAuth, L" ");
if ( pPos )
{
* pPos = L'\0';
strAuthScheme = lpAuth;
do
{
pPos = StrStrIW( pPos + 1, L"realm");
if ( ! pPos ) break;
pPos = StrChrW( pPos + 5, L'=');
if ( ! pPos ) break;
pPos = StrChrW( pPos + 1, L'"');
if ( ! pPos ) break;
LPWSTR lpRealm = pPos + 1;
pPos = StrChrW( lpRealm, L'"');
if ( ! pPos ) break;
* pPos = L'\0';
strAuthRealm = lpRealm;
} while (false);
}
else
{
strAuthScheme = lpAuth;
}
VirtualFree( lpAuth, 0, MEM_RELEASE);
// 由于 NPN_GetAuthenticationInfo 得不到 NTLM 的 domain,没办法做登录,只好不支持了
if (strAuthRealm == _T("NTLM")) return E_NOINTERFACE;
CUrl url;
if ( url.CrackUrl(pThis->m_strURL) )
{
CW2A aScheme(url.GetSchemeName());
CW2A aHost(url.GetHostName());
int aPort = url.GetPortNumber();
char* username = NULL;
char* password = NULL;
uint32_t ulen = 0, plen = 0;
char* szAuthScheme = CStringToUTF8String(strAuthScheme);
char* szAuthRealm = CStringToUTF8String(strAuthRealm);
NPError result = NPN_GetAuthenticationInfo(pThis->m_pIEHostWindow->m_pPlugin->m_pNPInstance, aScheme, aHost, aPort, szAuthScheme, szAuthRealm, &username, &ulen, &password, &plen );
delete[] szAuthScheme;
delete[] szAuthRealm;
if (result != NPERR_NO_ERROR) break;
pThis->m_strUsername = username;
pThis->m_strPassword = password;
NPN_MemFree(username);
NPN_MemFree(password);
}
* ppv = dynamic_cast<IAuthenticate *>(pThis);
//.........这里部分代码省略.........
示例3: UrlUnescapeInPlace
HRESULT FAsyncDownload::FHttpDownloadTP::ProcessDownload(FAsyncDownData *pData)
{
HRESULT hr = E_FAIL;
FString ReqUrl = pData->m_pUrlInfo->m_DownloadUrl;
UrlUnescapeInPlace(ReqUrl.GetBuffer(), 0);
CUrl url;
url.CrackUrl(ReqUrl);
const tchar* pszUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
FHInternet hIn = NULL;
if (g_AppSettings.m_Proxy.GetLength() > 0)
{
hIn = InternetOpen(pszUserAgent, INTERNET_OPEN_TYPE_PROXY, g_AppSettings.m_Proxy, g_AppSettings.m_ProxyA, 0);
}
else
{
hIn = InternetOpen(pszUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
}
if (NULL == hIn)
return E_HTTP_NET_ERROR;
FHInternet hCon = InternetConnect(hIn, url.GetHostName(), url.GetPortNumber(), url.GetUserName(), url.GetPassword(), INTERNET_SERVICE_HTTP, 0, 0);
if (NULL == hCon)
{
_DBGAlert("**FAsyncDownload::FHttpDownloadTP::ProcessDownload: InternetConnect() failed: %d\n", GetLastError());
return E_HTTP_NET_ERROR;
}
ULONG ulRecvTimeout = 15000;
InternetSetOption(hCon, INTERNET_OPTION_RECEIVE_TIMEOUT, &ulRecvTimeout, sizeof(ULONG));
FString StrRes = url.GetUrlPath();
StrRes+= url.GetExtraInfo();
FHInternet hReq = HttpOpenRequest(hCon, "GET", StrRes, NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_DONT_CACHE, 0);
if (NULL == hReq)
{
_DBGAlert("**FAsyncDownload::FHttpDownloadTP::ProcessDownload: HttpOpenRequest() failed: %d\n", GetLastError());
return E_HTTP_NET_ERROR;
}
size_type FileSize = 0;
if (!(pData->m_pUrlInfo->m_dwDownloadFlags & HTTP_FLAG_NO_RESUME))
FileSize = GetFileSize(pData->m_pUrlInfo->m_DownloadFile);
// See if file already exists on the disk.
if (FileSize > 0)
{
FString StrRange;
StrRange.Format("Range: bytes=%I64d-", FileSize);
HttpAddRequestHeaders(hReq, StrRange, StrRange.GetLength(), HTTP_ADDREQ_FLAG_ADD_IF_NEW);
}
FString StrVersion;
StrVersion.Format("LTV_VERSION: %s", g_AppSettings.m_AppVersion);
HttpAddRequestHeaders(hReq, StrVersion, StrVersion.GetLength(), HTTP_ADDREQ_FLAG_ADD_IF_NEW);
if (!HttpSendRequest(hReq, NULL, 0, NULL, 0))
{
int err = GetLastError();
_DBGAlert("**FAsyncDownload::FHttpDownloadTP::ProcessDownload: HttpSendRequest() failed: %d (0x%x)\n", err, HRESULT_FROM_WIN32(err));
InternetCloseHandle(hCon);
InternetCloseHandle(hIn);
return E_HTTP_NET_ERROR;
}
const DWORD dwBufferSize = 8192;
char pBuffer[dwBufferSize];
FHttpConnection FConn = hReq;
DWORD dwStatusCode = FConn.GetStatusCode();
FString ReqContentType = pData->m_pUrlInfo->m_ContentType;
pData->m_pUrlInfo->m_ContentType = FConn.GetHeader(HTTP_QUERY_CONTENT_TYPE);
pData->m_pUrlInfo->m_dwStatusCode = dwStatusCode;
if (!MatchContentType(ReqContentType, pData->m_pUrlInfo->m_ContentType))
{
_DBGAlert("**FAsyncDownload::FHttpDownloadTP::ProcessDownload: Content type mismatch: %s/%s\n", ReqContentType, pData->m_pUrlInfo->m_ContentType);
return E_NOINTERFACE; //E_NOINTERFACE = content type mismatch
}
if (dwStatusCode == 416 && FileSize > 0)
{
_DBGAlert("FAsyncDownload::FHttpDownloadTP::ProcessDownload: Server status code: %d. Download complete\n", dwStatusCode);
return S_OK;
}
//.........这里部分代码省略.........