2,586
社区成员
发帖
与我相关
我的任务
分享
char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
strcpy(strProxyList, "127.0.0.1:808");
strcpy(strUsername, "fengrongxing");
strcpy(strPassword, "123456");
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = strProxyList;
proxyinfo.lpszProxyBypass = NULL;
Session.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);
pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1);
DWORD WINAPI CDownLoadDlg::DownloadFileThread(LPVOID lpvoid)
{
CDownLoadDlg* pThis = (CDownLoadDlg *)lpvoid;
if(pThis == NULL) return 0;
CInternetSession aInternetSession; //一个会话
CHttpConnection* pHttpConnection = NULL; //链接
CHttpFile* pHttpFile = NULL;
const TCHAR szHeaders[] = _T("Accept: */*\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"); //协议
DWORD dwFileStatus;
BYTE szBuffer[1024];
DWORD nLen;
CFile aFile;
DWORD nSuccess = -1;
CString strServer;
INTERNET_PORT nPort;
CString strObject;
DWORD dwServiceType;
DWORD dwDownloadSize = 0;
CString strLogs;
//分解URL
if(AfxParseURL(pThis->m_strURL, dwServiceType, strServer, strObject, nPort))
{
//如果服务类型是HTTP下载
if(dwServiceType != AFX_INET_SERVICE_HTTP && dwServiceType != AFX_INET_SERVICE_HTTPS)
{
//返回成功
return FALSE;
}
}
try
{
//建立http连接
char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
strcpy(strProxyList, "127.0.0.1:808");
strcpy(strUsername, "fengrongxing");
strcpy(strPassword, "123456");
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = strProxyList;
proxyinfo.lpszProxyBypass = NULL;
aInternetSession.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
pHttpConnection = aInternetSession.GetHttpConnection(strServer, nPort);
//如果失败则线程退出
if(pHttpConnection != NULL)
{
//取得HttpFile对象
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,
strObject,
NULL,
1,
NULL,
NULL,
INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);
//如果失败则线程退出
if(pHttpFile != NULL)
{
pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1);
//增加请求头,如果失败
if(pHttpFile->AddRequestHeaders(szHeaders))
{
//发送文件请求
if(pHttpFile->SendRequest())
{
//查询文件状态
if(pHttpFile->QueryInfoStatusCode(dwFileStatus))
{
//如果文件状态正常
if ((dwFileStatus/100)*100 == HTTP_STATUS_OK)
{
//打开文件
if(aFile.Open(pThis->m_strFilePath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
{
DWORD dwFileLen;
DWORD dwWordSize = sizeof(dwFileLen);
pHttpFile->QueryInfo(HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_CONTENT_LENGTH,
&dwFileLen,&dwWordSize,NULL);
pThis->m_ProgressCtrl.SetRange32(0, dwFileLen);
//接收数据
nLen = pHttpFile->Read(szBuffer, 1024);
//接收文件数据每次接收一个块
while(nLen >0 && !pThis->m_bExist)
{
//如果接收到数据
if(nLen > 0)
{
//写入文件
aFile.Write(szBuffer, nLen);
dwDownloadSize += nLen;
//SetFileProgress(dwDownloadSize);
pThis->m_ProgressCtrl.SetPos(dwDownloadSize);
}
//接收一个块的数据
nLen = pHttpFile->Read(szBuffer, 1024);
}
//如果接收到数据
if(nLen > 0)
{
//写入文件
aFile.Write(szBuffer, nLen);
dwDownloadSize += nLen;
pThis->m_ProgressCtrl.SetPos(dwDownloadSize);
}
else
{
DWORD dw ;
if (InternetQueryDataAvailable((HINTERNET)(*pHttpFile), &dw, 0, 0) && (dw == 0))
{
//设置成功标志
nSuccess = 0;
}
}
//关闭文件
aFile.Close();
AfxMessageBox("下载完成");
}
}
}
}
}
//删除http文件对象
delete pHttpFile;
}
//删除http连接对象
delete pHttpConnection;
}
//关闭http连接
aInternetSession.Close();
//返回
return nSuccess;
}
//异常处理
catch(CInternetException* e)
{
TCHAR szCause[MAX_PATH] = {0};
//取得错误信息
e->GetErrorMessage(szCause, MAX_PATH);
//错误信息写入日志
TRACE("internet exception:%s\n", szCause);
//删除异常对象
e->Delete();
//删除http文件对象
if(pHttpFile != NULL ) delete pHttpFile;
//删除http连接对象
if(pHttpConnection != NULL) delete pHttpConnection;
//关闭http连接
aInternetSession.Close();
//返回
return -1;
}
}