• 利用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));  

  • 相关阅读:
    第六章 类(Class) 和对象(Object)
    如何在windows Server 2008虚拟机上安装SQLServer2008数据库
    小票打印机乱码问题
    SQLSERVER 的联接查询写法
    VMware下安装CentOS6.5
    疯狂java讲义--笔记
    学习Java第一篇——Java 安装及环境搭配
    informix数据迁移工具使用介绍
    informix 存储过程结构
    输入身份证号码自动读取生日与性别(delphi)
  • 原文地址:https://www.cnblogs.com/hackpig/p/1668353.html
Copyright © 2020-2023  润新知