第一步,当然是验证是否需要代理
int CDownload::NeedAuth(HINTERNET hRequest)
{
DWORD dwStatus = 0;
DWORD cbStatus = sizeof(dwStatus);
DWORD dwFlags = 0;
// Get status code.
if (!HttpQueryInfo(hRequest,
HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE,
&dwStatus,
&cbStatus,
NULL)){
return -1;
}
// Look for 401 or 407.
switch (dwStatus)
{
case HTTP_STATUS_DENIED:
dwFlags = HTTP_QUERY_WWW_AUTHENTICATE;
return 1;
case HTTP_STATUS_PROXY_AUTH_REQ:
dwFlags = HTTP_QUERY_PROXY_AUTHENTICATE;
return 1;
case HTTP_STATUS_OK:
return 0;
default:
return -1;
}
}
第二步,如果返回值是0,不需要代理,返回值是1,需要代理,取得用户名与密码后,调用下面代码登录。
InternetSetOption(
hRequest,
INTERNET_OPTION_PROXY_USERNAME,
ProxyUserName.GetBuffer(),
sizeof(TCHAR)*ProxyUserName.GetLength());
InternetSetOption(
hRequest,
INTERNET_OPTION_PROXY_PASSWORD,
ProxyPassword.GetBuffer(),
sizeof(TCHAR)*ProxyUserName.GetLength());
需要注意的是如果是 使用HttpSendRequestEx ,调用验证要在HttpEndRequest之后。