亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? inet.cpp

?? 網(wǎng)絡(luò)圖片收集軟件
?? CPP
字號:
// Inet.cpp: implementation of the CInet class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "image.h"
#include "Inet.h"

//#include <direct.h>
//#include <process.h>
//#include <io.h>


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



// 定義協(xié)議類型即HTTP類型
//static const char *szHttp = "http://";

// Request flags for session initialization:
//	Use existing INET setup, don't redirect to other servers automatically,
//	don't save pages in the browser's cache, always reload a page from the 
//	server (don't use the browser's cached copy)

static DWORD dwHttpRequestFlags =
	   INTERNET_FLAG_EXISTING_CONNECT|
	   INTERNET_FLAG_NO_AUTO_REDIRECT|
       INTERNET_FLAG_DONT_CACHE|
       INTERNET_FLAG_RELOAD; 


// 能夠處理的數(shù)據(jù)類型,下面的定義表示能夠處理所有的類型
static const TCHAR szHeaders[] = 
		_T("Accept: */*\r\n");
		//_T("*/*\r");

static const TCHAR szHeaders1[]=
		_T("If-Modified-Since: ");
static const TCHAR szHeaders2[]=
		_T("Connection: Keep-Alive\r");
static const TCHAR szHeaders3[]=
		_T("Cookie: \r");
static const TCHAR szHeaders4[]=
		_T("Accept-Language: zh-cn \r");

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CInet::CInet()
{
	m_hSession=NULL;
	//m_minsize=10;
}
CInet::~CInet()
{

}
CInet::RESULTS CInet::OpenSession(BOOL bUseProxy, CString &strProxyName)
{
	CInet::RESULTS ret;

	m_hSession = ::InternetOpen("image",
					bUseProxy?INTERNET_OPEN_TYPE_PROXY:INTERNET_OPEN_TYPE_PRECONFIG,
					bUseProxy?(LPCTSTR)strProxyName:(LPCTSTR)NULL,
					NULL,INTERNET_FLAG_ASYNC);//現(xiàn)在開始采用異步調(diào)用下載文件

	// 是否成功
	if(m_hSession != NULL)
	{
		DWORD dwTimeout = 8000;
		::InternetSetOption(m_hSession,INTERNET_OPTION_CONNECT_TIMEOUT,
									&dwTimeout,sizeof(dwTimeout));
						
		ret = SUCCESS;
	}
	else ret = BAD_URL;
	for(int i=0;i<3;i++)
		m_event[i]=CreateEvent(NULL,FALSE,FALSE,NULL);
	return(ret);
}
void CInet::CloseSession()
{
	::InternetCloseHandle(m_hSession);
	for(int i=0;i<3;i++)
		CloseHandle(m_event[i]);
}
//現(xiàn)在如果要保存大的圖片信息,因一次GetFile數(shù)據(jù)讀不完需要在
//本函數(shù)中進行續(xù)讀,要在本函數(shù)把信息保存起來。對于頁面來說不用考慮這種情況
CInet::RESULTS CInet::SaveFile(CString &strFileName,  BYTE *pbyBuffer, int nLen)
{
	CFile fileOut;
	CFileException ex;
	CString strTempName=strFileName;
	strTempName=strTempName.SpanExcluding("#");

	//創(chuàng)建本地文件
	if(fileOut.Open(strTempName,CFile::modeCreate|CFile::modeWrite,&ex))//CFile::modeNoTruncate
	{
		//fileOut.Seek(
		fileOut.Write(pbyBuffer,nLen);
		fileOut.Close();
	}
	else 
		return (BAD_FILENAME);
	return (SUCCESS);
	//return (UNKNOWN_ERROR);
}

//說明如果下載的為頁面 ptime 應(yīng)該為NULL,否則ptime應(yīng)該為指向一個CTime對象的指針
//strURL應(yīng)該為一個完整的url
CInet::RESULTS CInet::DoGet(CString &strURL, BYTE **pbyBuffer, int &nLen, CTime* ptime,bool bpage)
{
	CInet::RESULTS nRetCode = UNKNOWN_ERROR;
	CString strTempURL = strURL;
	DWORD dwCallbackThreadID;
	char	szTemp[256];
	CString t;
	DWORD dwStatusCode;
	DWORD dwStatusSize;

	try 
	{	//初始化返回的數(shù)據(jù)
		nLen=0;		
		CString strServer,strObject,strUser,strPassword;
		INTERNET_PORT nPort;
		DWORD dwServiceType;		
		if(!AfxParseURLEx(strTempURL,dwServiceType,strServer,strObject,nPort,strUser,strPassword,ICU_NO_ENCODE))
			return(CInet::BAD_URL);

		::ResetEvent(m_event[0]);
		::CreateThread(NULL,0,AsyncCallbackThread,this,NULL,&dwCallbackThreadID);
		::WaitForSingleObject(m_event[0],INFINITE);	
		//t=CTime::GetCurrentTime().FormatGmt("%a, %d %b %Y %I:%M:%S GMT");
		//t=_T("If-Modified-Since: ")+t+"\r";
		t=_T("Accept: */*\r\n");
		//t=t+_T("Connection: Keep-Alive\r");
		::ResetEvent(m_event[0]);
		if(ptime!=NULL)
		{
			t=ptime->FormatGmt("%a, %d %b %Y %I:%M:%S GMT");
			t=_T("If-Modified-Since: ")+t+"\r";
			m_hFile=::InternetOpenUrl(m_hSession,strURL,t,t.GetLength(),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD,(DWORD)this);
		}
		else
		m_hFile=::InternetOpenUrl(m_hSession,strURL,t,t.GetLength(),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD,(DWORD)this);
		if(NULL==m_hFile)
		{
			if(ERROR_IO_PENDING==::GetLastError())
			{
				if(::WaitForSingleObject(m_event[0],1000*60*5)==WAIT_TIMEOUT)//等待5分鐘
				{//現(xiàn)在等待已經(jīng)超時需要退出
					::SetEvent(m_event[2]);//設(shè)置回調(diào)函數(shù)退出的信號
					Sleep(1000);
					return TIMEOUT;
				}	
			}
		}
		//現(xiàn)在m_hFile可以使用了
		dwStatusSize=sizeof(dwStatusCode);
		if(FALSE==::HttpQueryInfo(m_hFile,HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,&dwStatusCode,&dwStatusSize,NULL))
		{//退出出現(xiàn)錯誤		
		}	
		// 需要重定向該頁面
		if(dwStatusCode==HTTP_STATUS_MOVED||dwStatusCode==HTTP_STATUS_REDIRECT||dwStatusCode==HTTP_STATUS_REDIRECT_METHOD)
		{                  
			::HttpQueryInfo(m_hFile,HTTP_QUERY_LOCATION,NULL,&dwStatusSize,0);
			::HttpQueryInfo(m_hFile,HTTP_QUERY_LOCATION,strTempURL.GetBufferSetLength(dwStatusSize),&dwStatusSize,0);
			strTempURL.ReleaseBuffer(dwStatusSize);

			CString strNewServer,strnewObject;
			AfxParseURLEx(strTempURL,dwServiceType,strNewServer,strnewObject,nPort,strUser,strPassword,ICU_NO_ENCODE);
			if(strNewServer.IsEmpty())
			{				
				if(strTempURL.Left(1)!="/")
				{
					int i;
					i=strObject.ReverseFind('/');
					if(i!=-1)
						strObject=strObject.Left(i);
					else
						strObject="";
					
					if(strObject!="")
						strTempURL=strObject+"/"+strTempURL;
					else
						strTempURL="/"+strTempURL;
				}
				strURL=strServer+strTempURL;
			}else 
			strURL=strTempURL;
			::InternetCloseHandle(m_hFile);
			return(LOCATION_MOVED);
		}
		else if(dwStatusCode == HTTP_STATUS_REQUEST_TIMEOUT||dwStatusCode == HTTP_STATUS_GATEWAY_TIMEOUT||dwStatusCode== HTTP_STATUS_NOT_FOUND)
		{
			Sleep(500L);	
			::InternetCloseHandle(m_hFile);
			return(TIMEOUT);
		}
		else if(dwStatusCode == HTTP_STATUS_OK)
		{
			BYTE *pbyTempBuffer = *pbyBuffer;
			int	hasRead=0;
			BOOL bOkay = TRUE;
			BOOL bImage=FALSE;
			DWORD ContentLenght=0;
			
			//下面開始檢查網(wǎng)頁下載中是否圖片
			dwStatusSize=sizeof(ContentLenght);
			if(!::HttpQueryInfo(m_hFile,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,&ContentLenght,&dwStatusSize,NULL))
			{
				ContentLenght=MAX_INET_BUFFER;				
			}
			if(ContentLenght>MAX_INET_BUFFER)
				return nRetCode;//文件的大小已經(jīng)超出了緩存的大小
			if(bpage)
			{
				dwStatusSize = sizeof(szTemp);
				::HttpQueryInfo(m_hFile,HTTP_QUERY_CONTENT_TYPE,szTemp,&dwStatusSize,NULL);
				CString type(szTemp);
				type.MakeLower();				
				if(type.Left(5)=="image")				
					bImage=TRUE;				
			}
			if(!bpage||bImage)
			{	
				if(t<m_minsize*1000)
				{
					::InternetCloseHandle(m_hFile);
					return (UNKNOWN_ERROR);
				}
			}			
			for(DWORD i=0;i<ContentLenght;)
			{
				INTERNET_BUFFERS i_buf={0};	
				i_buf.dwStructSize=sizeof(INTERNET_BUFFERS);
				i_buf.lpvBuffer=pbyTempBuffer+i;
				i_buf.dwBufferLength=1024*2;//2k的大小

				::ResetEvent(m_event[0]);
				if(::InternetReadFileEx(m_hFile,&i_buf,IRF_ASYNC,(DWORD)this)==FALSE)
				{
					
					if(ERROR_IO_PENDING==::GetLastError())
					{
						if(::WaitForSingleObject(m_event[0],5*60*1000)==WAIT_TIMEOUT)
						{//現(xiàn)在網(wǎng)絡(luò)已經(jīng)慢的不能忍受了可以考慮退出了
							return TIMEOUT;
						}
					}
				}
				if(m_pProgress->IsAborted())
					return UNKNOWN_ERROR;
				if(i_buf.dwBufferLength==0)//文件已經(jīng)讀完
				{
					ContentLenght=i;//ContentLenght中存放的是文件的真實大小
					break;
				}
				i+=i_buf.dwBufferLength;
			}

			pbyTempBuffer[ContentLenght]='\0';// 以NULL結(jié)束緩沖區(qū)
			nLen=ContentLenght;
			::InternetCloseHandle(m_hFile);

			if(bpage&&bImage)
				return IMAGE_TYPE;

			return(SUCCESS);
		}
		else
		{
			::InternetCloseHandle(m_hFile);
		}
	}
	catch (...)
	{
		if(m_hFile)
			::InternetCloseHandle(m_hFile);
		return(UNKNOWN_ERROR);
	}
	return (UNKNOWN_ERROR);
}

CInet::RESULTS CInet::GetPage(CString &strURL, BYTE **pbyBuffer, int &nLen, BOOL bRedirectOkay)
{
	int nRetries=2;
	CInet::RESULTS ret;

	do
	{
		//Get the page
		ret=DoGet(strURL,pbyBuffer,nLen,NULL,true);
	}
	while(nRetries--&&((ret==LOCATION_MOVED && bRedirectOkay)|| ret==TIMEOUT));

	return(ret);

	
}

CString CInet::SplitFileName(LPCTSTR lpszPath, int nSplit)
{
	CString strResult;

	char szPath[800],szDrive[800],szFileName[800],szExt[800];
	_splitpath(lpszPath,szDrive,szPath,szFileName,szExt);

	if(nSplit & CInet::DRIVE)
		strResult += szDrive;
	if(nSplit & CInet::PATH)
		strResult += szPath;
	if(nSplit & CInet::FNAME)
		strResult += szFileName;
	if(nSplit & CInet::EXT)
		strResult += szExt;

	return(strResult);

}

CString CInet::GetErrorText()
{
	CString strError;

	switch(m_dwRet)
	{
		case HTTP_STATUS_MOVED:
		case HTTP_STATUS_REDIRECT:
		case HTTP_STATUS_REDIRECT_METHOD:
			strError = "Redirected, but not found";
			break;

		case HTTP_STATUS_REQUEST_TIMEOUT:
		case HTTP_STATUS_GATEWAY_TIMEOUT:
			strError = "Timed out on request";
			break;

		case HTTP_STATUS_NOT_FOUND:
		case HTTP_STATUS_BAD_REQUEST:
		case HTTP_STATUS_GONE:
			strError = "Page or file not found";
			break;
	
		case HTTP_STATUS_DENIED:
		case HTTP_STATUS_PAYMENT_REQ:
		case HTTP_STATUS_FORBIDDEN:
		//case HTTP_STATUS_AUTH_REFUSED:
		//	strError = "Access denied";
		//	break;

		case HTTP_STATUS_PROXY_AUTH_REQ:
			strError = "Proxy authentication required";
			break;

		default:
			strError.Format("WinInet error %d",m_dwRet);
			break;
	}

	return(strError);

}

CInet::RESULTS CInet::GetFile(CString &strURL, BYTE **pbyBuffer, int &nLen, CTime *ptime)
{
	int nRetries=2;
	CInet::RESULTS ret;

	do
	{
		//Get the file
		ret=DoGet(strURL,pbyBuffer,nLen,ptime,false);
	}
	while(nRetries--&&(ret==LOCATION_MOVED ||ret==TIMEOUT));

	return (ret);

}

void CALLBACK CInet::AsyncInternetCallback(HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusINformationLength)
{
	CInet *pObj=(CInet*)dwContext;
	switch(dwInternetStatus)
	{
	case INTERNET_STATUS_HANDLE_CREATED:
		pObj->m_hFile=(HINTERNET)(((LPINTERNET_ASYNC_RESULT)(lpvStatusInformation))->dwResult);
		break;
	//句柄被關(guān)閉
	case INTERNET_STATUS_HANDLE_CLOSING:
		::SetEvent(pObj->m_event[1]);
		break;

	case INTERNET_STATUS_REQUEST_COMPLETE:
		if(ERROR_SUCCESS==((LPINTERNET_ASYNC_RESULT)(lpvStatusInformation))->dwError)
		{//設(shè)置句柄被創(chuàng)建事件或者讀數(shù)據(jù)完成事件
			::SetEvent(pObj->m_event[0]);
		}
		else
		{//發(fā)生錯誤事件,則設(shè)置子線程退出事件,這里非常重要一定要處理
			::SetEvent(pObj->m_event[2]);
		}
		break;
	}

}

DWORD WINAPI CInet::AsyncCallbackThread(LPVOID lpParameter)
{
	CInet * pObj=(CInet*)lpParameter;
	::InternetSetStatusCallback(pObj->m_hSession,AsyncInternetCallback);
	//通知子線程回調(diào)函數(shù)設(shè)置成功,子線程可以繼續(xù)執(zhí)行
	::SetEvent(pObj->m_event[0]);

	//等待文件下載完畢或者發(fā)生超時事件,如果發(fā)生了上面的事情則準備退出
	::WaitForSingleObject(pObj->m_event[2],INFINITE);
	return 0;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频一区二区| 久久九九国产精品| 91久久精品一区二区| 成人性生交大片免费看在线播放 | 国产精品天干天干在线综合| 精品国产a毛片| 2023国产精品| 久久精品男人的天堂| 国产欧美va欧美不卡在线| 久久精品一区四区| 欧美韩国日本不卡| 国产精品国产三级国产普通话99 | 欧美激情综合五月色丁香小说| 久久亚洲综合av| 久久久国产午夜精品| 国产午夜精品理论片a级大结局| 国产欧美日韩中文久久| 中文字幕亚洲区| 亚洲乱码中文字幕| 视频精品一区二区| 激情都市一区二区| a4yy欧美一区二区三区| 日本精品一区二区三区高清 | 丁香激情综合五月| 99久久精品一区| 欧美日韩一级视频| 精品成人一区二区| 国产精品少妇自拍| 亚洲一区欧美一区| 男女男精品视频网| 成人免费观看视频| 欧美色图12p| 精品播放一区二区| 亚洲天堂网中文字| 日韩精品久久理论片| 国产一区二区在线影院| av成人免费在线观看| 欧美日韩国产成人在线免费| 日韩精品一区二区三区中文精品| 国产午夜精品理论片a级大结局| 亚洲精品中文在线观看| 美腿丝袜亚洲综合| 99在线精品视频| 91.成人天堂一区| 中文在线一区二区| 午夜国产精品一区| 国产乱码精品一区二区三| 99精品视频在线免费观看| 在线成人av网站| 中文字幕在线观看不卡| 日韩福利电影在线| 成人精品免费网站| 日韩一区二区三区视频在线| 中文字幕一区二区在线观看| 亚洲不卡在线观看| 成av人片一区二区| 日韩女优电影在线观看| 亚洲免费色视频| 理论电影国产精品| 91高清在线观看| 国产精品污网站| 免费av网站大全久久| 91麻豆精品视频| 久久久久综合网| 视频一区二区中文字幕| 99re66热这里只有精品3直播| 欧美成va人片在线观看| 一区二区三区小说| 国产99久久久精品| 91精品国产日韩91久久久久久| 国产精品成人在线观看| 国产一区久久久| 欧美精品少妇一区二区三区| 中文字幕一区二区不卡| 国产高清在线精品| 日韩限制级电影在线观看| 亚洲伊人伊色伊影伊综合网| youjizz国产精品| 2023国产一二三区日本精品2022| 日本一区中文字幕| 欧美在线视频全部完| 亚洲品质自拍视频| 99久久精品99国产精品 | 亚洲一区二区三区免费视频| 白白色 亚洲乱淫| 国产欧美久久久精品影院| 捆绑调教美女网站视频一区| 欧美日韩国产另类一区| 亚洲一区二区三区四区五区黄 | 91豆麻精品91久久久久久| 欧美国产精品一区二区| 国产综合久久久久久鬼色| 日韩欧美123| 美女一区二区三区| 欧美一区二区大片| 日韩av电影一区| 91精品国产免费久久综合| 亚瑟在线精品视频| 欧美日韩激情一区二区| 亚洲国产精品一区二区久久| 一本久久精品一区二区| 亚洲免费观看在线视频| 色婷婷精品大视频在线蜜桃视频| 综合久久一区二区三区| 99久久精品免费精品国产| 成人欧美一区二区三区在线播放| 国产99精品视频| 国产精品久久久久久久久动漫| 成人av片在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 成人免费毛片aaaaa**| 亚洲私人黄色宅男| 一本色道a无线码一区v| 亚洲影视在线播放| 欧美一区午夜视频在线观看| 麻豆精品视频在线| 久久女同精品一区二区| 成人午夜视频福利| 亚洲视频香蕉人妖| 欧美性感一类影片在线播放| 天堂成人免费av电影一区| 日韩欧美高清一区| 国产成人在线观看| 中文字幕一区二区三区在线观看| 91久久精品一区二区二区| 天堂va蜜桃一区二区三区| 欧美成人a∨高清免费观看| 国产999精品久久久久久绿帽| 一区精品在线播放| 欧美日韩精品一区二区在线播放| 青青草国产成人99久久| 久久精品在线观看| 色婷婷精品大视频在线蜜桃视频| 午夜精品免费在线观看| 精品国产一区二区三区忘忧草 | 成人爽a毛片一区二区免费| 亚洲裸体xxx| 欧美一区二区三区在线| 国产精品一区二区三区99| 日韩毛片精品高清免费| 欧美高清精品3d| 国产suv精品一区二区三区| 《视频一区视频二区| 欧美一区二区性放荡片| 成人午夜视频在线观看| 亚洲一区在线观看免费观看电影高清| 欧美一级精品大片| 成人aa视频在线观看| 日本网站在线观看一区二区三区| 欧美韩日一区二区三区| 欧美日韩和欧美的一区二区| 国产精品资源在线观看| 亚洲综合在线电影| 26uuu另类欧美亚洲曰本| 色狠狠av一区二区三区| 极品美女销魂一区二区三区免费| 亚洲欧美日韩在线播放| 欧美不卡一区二区| 欧美在线观看一区| 国产98色在线|日韩| 五月婷婷激情综合| 中文av一区二区| 日韩欧美成人一区二区| 色一区在线观看| 国产精品综合在线视频| 午夜电影一区二区| 日韩理论片网站| 久久精品免费在线观看| 不卡av在线网| 国产一区二区福利| 午夜精品一区在线观看| 亚洲男人都懂的| 国产欧美一区二区精品性色| 人妖欧美一区二区| 91久久国产综合久久| 国产精品视频第一区| 97久久精品人人做人人爽| 欧美刺激午夜性久久久久久久| 国产精品色婷婷久久58| 国产乱色国产精品免费视频| 在线中文字幕一区| 国产精品久久夜| 99精品国产一区二区三区不卡| 久久看人人爽人人| 国产福利一区二区三区视频| 精品国产乱码久久久久久图片| 久久成人免费网站| 久久这里都是精品| 色屁屁一区二区| 亚洲日本va在线观看| 色综合天天综合网国产成人综合天| 精品国产免费一区二区三区四区 | 国产精品久久久久aaaa| 国产一区在线看| 久久蜜桃一区二区| 色婷婷综合久久久中文字幕| 国产女人18水真多18精品一级做| 极品美女销魂一区二区三区免费| 亚洲图片激情小说| 色狠狠一区二区|