代理上网相关代码

代理上网相关代码收藏

<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

#include   "stdafx.h"     #include   "HttpDownload.h"             #ifdef   _DEBUG     #undef   THIS_FILE     static   char   THIS_FILE[]=__FILE__;     #define   new   DEBUG_NEW     #endif         //     //   Construction/Destruction     //         HttpDownload::HttpDownload()     {     m_isSendMsg=FALSE;         }         HttpDownload::~HttpDownload()     {         }         UINT   HttpDownload::Download(CString   url,CString   saveFile,DWORD   fileSize,BOOL   isForceGetFileLength,BOOL   isForceDown)     {     CHAR   szHead[]="Accept:   */*/r/n/r/n";             VOID*   szTemp[16384];     HINTERNET     downFileHandle;             DWORD   dwByteToRead   =   0;     DWORD   dwSizeOfRq   =   4;     CFile   downFile;     DWORD   dwSize=0;     DWORD   downTotal=0;     CString   tempFileName;             if(m_hSession!=NULL)     {     if(!(downFileHandle=InternetOpenUrl(m_hSession,   url,   szHead,lstrlenA(szHead),   INTERNET_FLAG_RELOAD,0)))     {     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_OPENFILEERROR;     }     if(isForceGetFileLength)     {     if(!HttpQueryInfo(downFileHandle,   HTTP_QUERY_CONTENT_LENGTH   |   HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,   &dwSizeOfRq,   NULL))     {     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_GETFILELENGTHERROR;     }     }else     dwByteToRead=fileSize;     if(!isForceDown)     {     CFileFind   findDownload;     if(findDownload.FindFile(saveFile))     {         findDownload.FindNextFile();     DWORD   fileLength=findDownload.GetLength();     findDownload.Close();     if(fileLength==dwByteToRead)     {         InternetCloseHandle(downFileHandle);     if(m_isSendMsg)     ::PostMessage(m_hwnd,IOM_DOWNLOAD,0,fileLength);     return   HTTPDOWN_DOWNLOADSUCCESS;     }     else     {     tempFileName=saveFile+".down";     if(!downFile.Open(tempFileName,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     }         }else     {     findDownload.Close();     tempFileName=saveFile+".down";     if(!findDownload.FindFile(tempFileName))     {     findDownload.Close();     if(!downFile.Open(tempFileName,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     }else     {     findDownload.Close();     if(!downFile.Open(tempFileName,CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     DWORD   curFileLength=downFile.SeekToEnd();     if(m_isSendMsg)     ::PostMessage(m_hwnd,IOM_DOWNLOAD,0,curFileLength);     if(!InternetSetFilePointer(downFileHandle,curFileLength,NULL,0,0))     {     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADSETPOINTERROR;       }     }     }         }else     {     tempFileName=saveFile+".down";     DeleteFile(saveFile);     DeleteFile(tempFileName);     if(!downFile.Open(tempFileName,CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     }     do     {           if(!InternetReadFile(downFileHandle,   szTemp,   16384,   &dwSize)   )           {         downFile.Close();           InternetCloseHandle(downFileHandle);         return   HTTPDOWN_DOWNLOADREADDATAERROR;           }           if(!dwSize)         break;               else           {         downTotal+=dwSize;         downFile.Write(szTemp,dwSize);         if(m_isSendMsg)         ::PostMessage(m_hwnd,IOM_DOWNLOAD,0,dwSize);           }     }while(TRUE);     downFile.Close();       CFile::Rename(tempFileName,saveFile);     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADSUCCESS;     }else     return   HTTPDOWN_DOWNLOADSEESSIONNULL;     }             UINT   HttpDownload::InitHttpSession()     {     DWORD   dwFlags;     InternetGetConnectedState(&dwFlags,   0);     if(!(dwFlags   &   INTERNET_CONNECTION_PROXY))     {     AfxMessageBox("----1----");     m_hSession   =   ::InternetOpen("VISALL_DOWNLOAD",INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,   NULL,   NULL,   0);     }     else     {     AfxMessageBox("----2----");     m_hSession   =   ::InternetOpen("VISALL_DOWNLOAD",INTERNET_OPEN_TYPE_PRECONFIG,   NULL,   NULL,   0);     }     if(m_hSession==NULL)     return   HTTPDOWN_INITSESSIONERROR;     else     return   HTTPDOWN_INITSESSIONSUCCESS;     }         UINT   HttpDownload::UnInitHttpSession()     {     if(m_hSession)     {     if(InternetCloseHandle(m_hSession))     return   HTTPDOWN_UNINITSESSIONSUCCESS;     else     return   HTTPDOWN_UNINITSESSIONERROR;     }else     return   HTTPDOWN_UNINITSESSIONSUCCESS;     }         void   HttpDownload::SetProgressHwnd(HWND   hwnd)     {     m_hwnd=hwnd;     }         void   HttpDownload::SetProgressMsg(BOOL   isSend)     {     m_isSendMsg=isSend;     }         UINT   HttpDownload::SetTimeOut(DWORD   connectTimeOut,DWORD   receiveTimeout,DWORD   sendTimeOut)     {     if(m_hSession)     {     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_CONNECT_TIMEOUT,   &connectTimeOut,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT,   &receiveTimeout,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_CONTROL_SEND_TIMEOUT,   &sendTimeOut,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_DATA_SEND_TIMEOUT,   &sendTimeOut,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,   &receiveTimeout,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     return   HTTPDOWN_SETTIMEOUTSUCCESS;     }else     return   HTTPDOWN_SETTIMEOUTERROR;     }             #if   !defined(AFX_HTTPDOWNLOAD_H__41263D8F_321A_42F0_889F_3ADB44C80EC0__INCLUDED_)     #define   AFX_HTTPDOWNLOAD_H__41263D8F_321A_42F0_889F_3ADB44C80EC0__INCLUDED_         #if   _MSC_VER   >   1000     #pragma   once     #endif   //   _MSC_VER   >   1000         #include   <wininet.h>     #include   <mmsystem.h>         const   UINT   HTTPDOWN_OPENFILEERROR=1;     const   UINT   HTTPDOWN_GETFILELENGTHERROR=2;     const   UINT   HTTPDOWN_INITSESSIONERROR=3;     const   UINT   HTTPDOWN_INITSESSIONSUCCESS=4;     const   UINT   HTTPDOWN_DOWNLOADSUCCESS=5;     const   UINT   HTTPDOWN_DOWNLOADCREATEFILEERROR=6;     const   UINT   HTTPDOWN_DOWNLOADSETPOINTERROR=7;     const   UINT   HTTPDOWN_DOWNLOADREADDATAERROR=8;     const   UINT   HTTPDOWN_UNINITSESSIONERROR=9;     const   UINT   HTTPDOWN_UNINITSESSIONSUCCESS=10;     const   UINT   HTTPDOWN_SETTIMEOUTSUCCESS=11;     const   UINT   HTTPDOWN_SETTIMEOUTERROR=12;     const   UINT   HTTPDOWN_DOWNLOADSEESSIONNULL=13;         class   HttpDownload         {     public:     HttpDownload();     virtual   ~HttpDownload();         //Operator     public:     UINT   Download(CString   url,CString   saveFile,DWORD   fileSize,BOOL   isForceGetFileLength,BOOL   isForceDown);     void   SetProgressHwnd(HWND   hwnd);     void   SetProgressMsg(BOOL   isSend);     UINT   InitHttpSession();     UINT   UnInitHttpSession();     UINT   SetTimeOut(DWORD   connectTimeOut,DWORD   receiveTimeout,DWORD   sendTimeOut);     //Attribtue     private:     HWND   m_hwnd;             BOOL   m_isSendMsg;     HINTERNET   m_hSession;//   会话句柄     #define   IOM_DOWNLOAD   WM_USER   +155     };         #endif   //   !defined(AFX_HTTPDOWNLOAD_H__41263D8F_321A_42F0_889F_3ADB44C80EC0__INCLUDED_)  

================

3. 使用代理服务器 (1)请将dwAccessType设置成INTERNET_OPEN_TYPE_PROXY (2)设置lpszProxy    (a)代理的格式必须为:[<protocol>=][<scheme>://]<proxy>[:<port>].    (b)其中protocol, scheme://, :port是可选项, 如果忽略这三者, 则它们默认分别为       HTTP, HTTP://, :80. 即默认为HTTP代理.    (c)多个代理必须使用" "(空格)隔开    (d)各种常用代理的使用见如下:       HTTP:       HTTP=HTTP://proxyserver:port       FTP:       FTP:FTP://proxyserver:port       GOPHER       GOPHER=HTTP://proxyserver:port       SOCKS=proxyserver:port       其中前三种都可以在msdn中找到, 但第四种我可是找了N多地方才好不容易找到了. 另外要注意, msdn中明确说明只有安装了IE才能使用SOCKS代理. --------------------------------------------------------------- The   following   example   code   shows   how   authentication   could   be   handled   using   InternetSetOption.             HINTERNET   hOpenHandle,     hResourceHandle;     DWORD   dwError,   dwStatus;     DWORD   dwStatusSize   =   sizeof(dwStatus);     char   strUsername[64],   strPassword[64];         hOpenHandle   =   InternetOpen("Example",                                                             INTERNET_OPEN_TYPE_PRECONFIG,                                                             NULL,   NULL,   0);     hConnectHandle   =   InternetConnect(hOpenHandle,                                                                         "www.server.com",                                                                         INTERNET_INVALID_PORT_NUMBER,                                                                         NULL,                                                                       NULL,                                                                         INTERNET_SERVICE_HTTP,                                                                       0,0);         hResourceHandle   =   HttpOpenRequest(hConnectHandle,   "GET",                                                                         "/premium/default.htm",                                                                         NULL,   NULL,   NULL,                                                                           INTERNET_FLAG_KEEP_CONNECTION,                                                                           0);         resend:         HttpSendRequest(hResourceHandle,   NULL,   0,   NULL,   0);         HttpQueryInfo(hResourceHandle,   HTTP_QUERY_FLAG_NUMBER   |                                   HTTP_QUERY_STATUS_CODE,   &dwStatus,   &dwStatusSize,   NULL);         switch   (dwStatus)     {             case   HTTP_STATUS_PROXY_AUTH_REQ:   //   Proxy   Authentication   Required                     //   Insert   code   to   set   strUsername   and   strPassword.                         //   cchUserLength   is   the   length   of   strUsername   and                       //   cchPasswordLength   is   the   length   of   strPassword.                     DWORD   cchUserLength,   cchPasswordLength;                         //   Insert   code   to   safely   determine   cchUserLength   and                     //   cchPasswordLength.   Insert   appropriate   error   handling   code.                     InternetSetOption(hResourceHandle,                                                           INTERNET_OPTION_PROXY_USERNAME,                                                           strUsername,                                                           cchUserLength+1);                         InternetSetOption(hResourceHandle,                                                           INTERNET_OPTION_PROXY_PASSWORD,                                                           strPassword,                                                           cchPasswordLength+1);                     goto   resend;                     break;                 case   HTTP_STATUS_DENIED:           //   Server   Authentication   Required.                     //   Insert   code   to   set   strUsername   and   strPassword.                         //   cchUserLength   is   the   length   of   strUsername   and                       //   cchPasswordLength   is   the   length   of   strPassword.                     DWORD   cchUserLength,   cchPasswordLength;                         //   Insert   code   to   safely   determine   cchUserLength   and                       //   cchPasswordLength.   Insert   error   handling   code   as                       //   appropriate.                     InternetSetOption(hResourceHandle,   INTERNET_OPTION_USERNAME,                                                         strUsername,   cchUserLength+1);                     InternetSetOption(hResourceHandle,   INTERNET_OPTION_PASSWORD,                                                         strPassword,   cchPasswordLength+1);                     goto   resend;                     break;     }         //   Insert   code   to   read   the   data   from   the   hResourceHandle     //   at   this   point.       

 

====================================== 设置代理服务器的代码:     for   example:             INTERNET_PER_CONN_OPTION_LIST         List;     INTERNET_PER_CONN_OPTION                   Option[1];     unsigned   long                                         nSize   =   sizeof(INTERNET_PER_CONN_OPTION_LIST);         Option[0].dwOption   =   INTERNET_PER_CONN_PROXY_SERVER;     Option[0].Value.pszValue   =   "http://myproxy:8080";         List.dwSize   =   sizeof(INTERNET_PER_CONN_OPTION_LIST);     List.pszConnection   =   NULL;     List.dwOptionCount   =   1;     List.dwOptionError   =   0;     List.pOptions   =   Option;         if(!InternetSetOption(NULL,   INTERNET_OPTION_PER_CONNECTION_OPTION,   &List,   nSize))           printf("InternetQueryOption   failed!   (%d)/n",   GetLastError());     //more   detail:     HOWTO:   Programmatically   Query   and   Set   Proxy   Settings   Under   Internet   Explorer    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值