通过代理访问web

下面这段是获取本地代理服务器设置的。其中,用到了下面三个成员变量:

 CString m_PassWord;
 CString m_UserName;
 LPINTERNET_PROXY_INFO m_ProxyInfo;

void CGetWebFile::GetProxy()
{
 DWORD dwSize;
 InternetQueryOption(NULL,INTERNET_OPTION_PROXY,NULL,&dwSize);
 if(dwSize > 0)
 {
  BYTE *lpszData = new BYTE[dwSize];
  InternetQueryOption(NULL,   INTERNET_OPTION_PROXY,lpszData,&dwSize);
  m_ProxyInfo = (LPINTERNET_PROXY_INFO)lpszData;
  
  InternetQueryOption(NULL, INTERNET_OPTION_PROXY_USERNAME, NULL, &dwSize);
  if(dwSize > 0)
  {
   lpszData = new BYTE[dwSize];
   InternetQueryOption(NULL, INTERNET_OPTION_PROXY_USERNAME, lpszData, &dwSize);
   m_UserName = lpszData;
   delete []lpszData;
  }
  
  InternetQueryOption(NULL, INTERNET_OPTION_PROXY_PASSWORD, NULL, &dwSize);
  if(dwSize > 0)
  {
   lpszData = new BYTE[dwSize];
   InternetQueryOption(NULL, INTERNET_OPTION_PROXY_PASSWORD, lpszData, &dwSize);
   m_PassWord = lpszData;
   delete []lpszData;
  }
 }
}

下面这段代码,是利用代理服务器下载文件的:

BOOL CGetWebFile::GetWebFile(CString theUrl, CString Filename,
          PX_TYPE nUseProxy/* = PX_AUTO*/,
          LPCTSTR proxyServer/* = NULL*/, WORD proxyPort/* = 8080*/,
          LPCTSTR proxyUser/* = NULL*/, LPCTSTR proxyPassword/* = NULL*/)
{
 LPINTERNET_PROXY_INFO pProxyInfo = NULL;
 CString strUserName;
 CString strUserPassword;

// DWORD dwSize;
// char *lpszData;
 INTERNET_PROXY_INFO proxyInfo;
 CString proxyString;
 CInternetSession session;
 CInternetFile* file = NULL;
 try
 {
  // Try to connect with the URL
  pProxyInfo = m_ProxyInfo;
  if(pProxyInfo)
  {
   if(!session.SetOption(INTERNET_OPTION_PROXY, (LPVOID)pProxyInfo, sizeof(INTERNET_PROXY_INFO)))
   {
    return FALSE;
   }
  }
  file = (CInternetFile*)session.OpenURL(theUrl);
  if(pProxyInfo)
  {
   if((!strUserName.IsEmpty()) && (!strUserPassword.IsEmpty()))
   {
    if( (!file->SetOption(INTERNET_OPTION_PROXY_USERNAME, (DWORD)strUserName.GetBuffer(strUserName.GetLength()), strUserName.GetLength() + 1)) ||
     (!file->SetOption(INTERNET_OPTION_PROXY_PASSWORD, (DWORD)strUserPassword.GetBuffer(strUserPassword.GetLength()), strUserPassword.GetLength() + 1)))
    {
     file->Close();
     delete file;
     return FALSE;
    }
   }
  }
 }
 catch (CInternetException* m_pException)
 {
  // if some error occurs, set the file with NULL
  file = NULL;
  m_pException->Delete();
  return FALSE;
 }
 
 BOOL bRet = FALSE;
 // use dataStore to save the file content
 CStdioFile dataStore;
 if(dataStore.Open(Filename, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite | CFile::typeBinary))
 {
  if (file)
  {
   #define BUFFER_SIZE 2048
   UINT somelen = 0;
   BYTE somecode[BUFFER_SIZE];
   while((somelen = file->Read(somecode, BUFFER_SIZE)) > 0)
   {
    dataStore.Write(somecode, somelen);
   }
   bRet = TRUE;
  }
  dataStore.Close();
 }
 if(file)
 {
  file->Close();
  delete file;
 }
 return bRet;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值