通过代理服务器下载网页

来源:互联网 发布:大智慧贵金属软件 编辑:程序博客网 时间:2024/05/18 09:18

#include <afxinet.h>
#pragma comment(lib, "Wininet.lib")

//-----------------------------------------------------------------------------
//   网页下载
//IN : strDownText 下载后网页的源码文本,strUrl 网页的链接地址
//OUT : 
//RETURN: 成功返回TRUE,失败返回FALSE
//AUTHOR: 2005-8-8 Created by yangdz
//NOTE : 
//-----------------------------------------------------------------------------
BOOL DownHttp(CString& strDownText, const char* url)
{
 char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
 //in this case "proxya" is the proxy server name, "8080" is its port
 strcpy(strProxyList, "203.55.231.107:8080"); //代理服务器地址
 strcpy(strUsername, ""); //用户名
 strcpy(strPassword, ""); //密码
 
 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 = strDownText.GetBuffer(nFileSize);
 UINT uBytesRead = pHttpFile->Read(rbuf, nFileSize);
 strDownText.ReleaseBuffer();
 pHttpFile->Close();
 delete pHttpFile;
 pConnection->Close();
 delete pConnection;
 mysession.Close();
 
 return TRUE;