unsigned __stdcall downloadThreadFunc( void* pArguments )
{
tagParam *pParam = (tagParam*)pArguments;
CHttpScanDlg *pDlg = (CHttpScanDlg*)pParam->m_lpVoid;
ASSERT(pDlg != NULL);
int iListNum = pParam->m_iNum;
CString strUrl = pDlg->getUrl(iListNum);
char *Url = (LPSTR)(LPCTSTR)strUrl;
int iPos = strUrl.ReverseFind('/');
char *pFileName = strUrl.GetBuffer() + iPos +1;
CString strServer;
CString strObject;
INTERNET_PORT iPort =0;
DWORD dwServiceType;
AfxParseURL(Url,dwServiceType,strServer,strObject,iPort);
CListCtrl* pListCtrl = (CListCtrl*)pDlg->GetDlgItem(IDC_HTTPLIST);
//pListCtrl->SetItemText(iListNum,3,"");
//pListCtrl->SetItemText(iListNum,4,"");
pListCtrl->SetItemText(iListNum,5,GetCurrentDateTime());
HINTERNET hSession = InternetOpen( AfxGetAppName() , INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );
if (hSession == NULL)
{
CListCtrl* pListCtrl = (CListCtrl*)pDlg->GetDlgItem(IDC_HTTPLIST);
pListCtrl->SetItemText(iListNum,3,"Fail");
pListCtrl->SetItemText(iListNum,4,"Open error");
pListCtrl->SetItemText(iListNum,6,GetCurrentDateTime());
return 1;
}
HINTERNET hConnect = InternetConnect(hSession,strServer,
iPort,
NULL,NULL,
INTERNET_SERVICE_HTTP,0,0);
if (hConnect == NULL)
{
InternetCloseHandle(hSession);
CListCtrl* pListCtrl = (CListCtrl*)pDlg->GetDlgItem(IDC_HTTPLIST);
pListCtrl->SetItemText(iListNum,3,"Fail");
pListCtrl->SetItemText(iListNum,4,"Connect error");
pListCtrl->SetItemText(iListNum,6,GetCurrentDateTime());
return 1;
}
//LPCSTR acceptTypes = _T("*/*");
HINTERNET hRequest=HttpOpenRequest(hConnect,_T("GET"),strObject,
NULL,NULL,
NULL,
INTERNET_FLAG_RELOAD,0
);
if (hRequest == NULL)
{
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
pListCtrl->SetItemText(iListNum,3,"Fail");
pListCtrl->SetItemText(iListNum,4,"OpenRequest error");
pListCtrl->SetItemText(iListNum,6,GetCurrentDateTime());
return 1;
}
if(!HttpSendRequest( hRequest, NULL, 0, NULL, 0))
{
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
pListCtrl->SetItemText(iListNum,3,"Fail");
pListCtrl->SetItemText(iListNum,4,"SendRequest error");
pListCtrl->SetItemText(iListNum,6,GetCurrentDateTime());
return 1;
}
char szCode[128] = {0};
DWORD buflen = 128;
BOOL bRet = FALSE;
bRet = HttpQueryInfo(hRequest,HTTP_QUERY_STATUS_CODE,szCode,&buflen,NULL);
if(strcmp(szCode,"200") == 0)
{
//pListCtrl->SetItemText(iListNum,3,"Fail");
pListCtrl->SetItemText(iListNum,4,"200");
}
else
{
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
pListCtrl->SetItemText(iListNum,3,"Fail");
pListCtrl->SetItemText(iListNum,4,szCode);
pListCtrl->SetItemText(iListNum,6,GetCurrentDateTime());
return 1;
}
byte Temp[MAXBLOCKSIZE] = {0};
ULONG Number = 1 ;
FILE * stream;
errno_t err;
if ((err = fopen_s(&stream, pFileName ,"wb")) == 0 )
{
while (Number != 0 )
{
InternetReadFile(hRequest, Temp, MAXBLOCKSIZE, & Number);
// fprintf(stream, (const char*)Temp);
fwrite(Temp, sizeof ( char ), Number , stream);
}
fclose( stream );
pListCtrl->SetItemText(iListNum,3,"Success");
}
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
pListCtrl->SetItemText(iListNum,6,GetCurrentDateTime());
return 0;
}