• 利用Wininet SetOption设置代理


    这是摘自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));  

  • 相关阅读:
    [BJOI2006]狼抓兔子
    hdu 1878 欧拉回路,图的连通性判断
    poj 3844 Divisible Subsequences 剩余类,组合计数
    LA 4609 ,poj 3842 An Industrial Spy
    hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
    hdu 4642 Fliping game 翻硬币游戏 抓住特征变量
    13多校#4 ,组队赛#18 总结
    ACM 大牛的博客
    LA 4329 Ping Pong 2008 北京区域赛 H , BIT 二叉索引树(树状数组)的应用
    poj 2689 Prime Distance 二次筛法,找出给定区间所有约数
  • 原文地址:https://www.cnblogs.com/hackpig/p/1668353.html
Copyright © 2020-2023  润新知