现在的位置: 首页 > 综合 > 正文

利用Wininet SetOption设置代理

2012年10月13日 ⁄ 综合 ⁄ 共 2258字 ⁄ 字号 评论关闭

这是摘自msdn中的一个利用代理下载网络文件的例子。

CString   GeHttptFile(const   char   *url)  
  {  
  CString   szContent;  
  char   strProxyList[MAX_PATH],   strUsername[64],   strPassword[64];  
  //in   this   case   "proxya"   is   the   proxy   server   name,   "8080"   is   its   port  
  strcpy(strProxyList,   "proxya:8080");  
  strcpy(strUsername,   "myusername");  
  strcpy(strPassword,   "mypassword");  
  DWORD   dwServiceType   =   AFX_INET_SERVICE_HTTP;  
  CString   szServer,   szObject;  
  INTERNET_PORT   nPort;  
  AfxParseURL(url,   dwServiceType,   szServer,   szObject,   nPort);  
  CInternetSession   mysession;  
  CHttpConnection*   pConnection;  
  CHttpFile*   pHttpFile;  
  pConnection   =   mysession.GetHttpConnection(szServer,  
  INTERNET_FLAG_KEEP_CONNECTION,  
  INTERNET_INVALID_PORT_NUMBER,  
  NULL,   NULL);  
  pHttpFile   =   pConnection->OpenRequest("GET",   szObject,  
    NULL,   0,   NULL,   NULL,  
    INTERNET_FLAG_KEEP_CONNECTION);  
  //here   for   proxy  
  INTERNET_PROXY_INFO   proxyinfo;  
  proxyinfo.dwAccessType   =   INTERNET_OPEN_TYPE_PROXY;  
  proxyinfo.lpszProxy   =   strProxyList;  
  proxyinfo.lpszProxyBypass   =   NULL;  
  mysession.SetOption(INTERNET_OPTION_PROXY,   (LPVOID)&proxyinfo,   sizeof(INTERNET_PROXY_INFO));  
  pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME,   strUsername,   strlen(strUsername)+1);  
  pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD,   strPassword,   strlen(strPassword)+1);  
   
  pHttpFile->SendRequest(NULL);  
  DWORD   nFileSize   =   pHttpFile->GetLength();  
  LPSTR   rbuf   =   szContent.GetBuffer(nFileSize);  
  UINT   uBytesRead   =   pHttpFile->Read(rbuf,   nFileSize);  
  szContent.ReleaseBuffer();  
  pHttpFile->Close();  
  delete   pHttpFile;  
  pConnection->Close();  
  delete   pConnection;  
  mysession.Close();  
  return   szContent;  
  }

ASSERT(m_astrProxies.GetSize()>0);  
  CString   strProxy=m_astrProxies[m_iProxyIndex];  
  if(strProxy.IsEmpty())  
  {  
  INTERNET_PROXY_INFO   ipi;  
  ipi.dwAccessType=INTERNET_OPEN_TYPE_DIRECT;  
  ipi.lpszProxy=NULL;  
  ipi.lpszProxyBypass=NULL;   
  UrlMkSetSessionOption(INTERNET_OPTION_PROXY,&ipi,sizeof(ipi),0);  
  }  
  else  
  {  
  INTERNET_PROXY_INFO   ipi;  
  ipi.dwAccessType=INTERNET_OPEN_TYPE_PROXY;  
  ipi.lpszProxy=strProxy;  
  ipi.lpszProxyBypass=NULL;   
  UrlMkSetSessionOption(INTERNET_OPTION_PROXY,&ipi,sizeof(ipi),0);  
  }   

  SetOption(INTERNET_OPTION_PROXY_USERNAME,   (LPVOID)szID,   ::lstrlen(szID));  
  SetOption(INTERNET_OPTION_PROXY_PASSWORD,   (LPVOID)szPassword,   ::lstrlen(szPassword));  

抱歉!评论已关闭.