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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? w3c.h

?? 基于w3c的網絡開發用例
?? H
字號:
/*
 * $ dally project : www client
 * ---------------------------------------------------------------------------------------
 * description :
 *    W3Client ; synchronized www client class
 *    AsyncW3Client ; asynchronized www client class
 *
 *    - HTTP/HTTPS support
 *       - GET method support
 *       - POST method support
 *       - POST Multiparts/form-data method support
 *    - FTP support
 *       - Get support
 *       - Put support
 *    - ETC
 *       - url parse
 *
 * special thanks.
 *    Yun Myungwook, Peter Newman, ...
 *
 * ----------------------------------------------------------------------------------------
 * coded by Heo Yongseon ( gooshin@zzem.net )
 *
 * This code distributed under BSD License Style.
 *
 * -----------------------------------------------------------------------------------------
 * TO DO :
 *
 * -----------------------------------------------------------------------------------------
 * sample 
 *
 *   // synchronized(blocked) www client example
 *   #include <iostream>
 *   #include <net/w3c.h>
 *   
 *   using namespace std;
 *   using namespace dally;
 *   
 *   int main(int argc, char *argv[]){
 *   
 *   	W3Client w3;
 *   
 *   	if(w3.Connect("http://google.com")){
 *   		if(w3.Request("/")){
 *   			char buf[1024]="\0";
 *   			while(w3.Response(reinterpret_cast<unsigned char *>(buf), 1024))
 *   				cout << buf ;
 *   		}
 *   		w3.Close();
 *   	}
 *   	return 0;
 *   }
 *
 *	 // asynchronized www client example
 *   #include <iostream>
 *   #include <net/w3c.h>
 *   #include <wt.h>
 *   #include <windows.h>
 *   
 *   using namespace std;
 *   using namespace dally;
 *   
 *   CRITICAL_SECTION __cs;
 *   
 *   class AsDown : public AsyncW3Client, public IWORKERTHREAD {
 *   public:
 *   	AsDown(unsigned int idx):AsyncW3Client(), IWORKERTHREAD(idx){}
 *   	virtual ~AsDown(){}
 *   private:
 *   	virtual void OnWork(){
 *   		while(true){
 *   			WaitCompleteRequest();
 *   
 *   			unsigned char buf[1024]="\0";
 *   			while(Response(buf, 1024)){
 *   					::EnterCriticalSection(&__cs);
 *   					cout << reinterpret_cast<char*>(buf);
 *   					::LeaveCriticalSection(&__cs);
 *   					memset(buf, 0x00, 1024);
 *   			}
 *   
 *   			::Sleep(500);
 *   		}
 *   	}
 *   };
 *   
 *   void CALLBACK __getstatus(  HINTERNET hInternet,
 *    												  DWORD_PTR dwContext,
 *    												  DWORD dwInternetStatus,
 *    												  LPVOID lpvStatusInformation,
 *    												  DWORD dwStatusInformationLength
 *    												  ){
 *   
 *   	AsyncW3Client *pcontext=reinterpret_cast<AsyncW3Client*>(dwContext);
 *    
 *   	unsigned long nbytes=0;
 *    	::EnterCriticalSection(&__cs);
 *    	switch(dwInternetStatus){
 *   	case INTERNET_STATUS_SENDING_REQUEST:
 *   		cout << "request sending..." << endl;
 *   		break;
 *   	case INTERNET_STATUS_REQUEST_SENT:
 *   		{
 *   			unsigned long *pnsent=(unsigned long*)lpvStatusInformation;
 *   			cout << "bytes sent: " << *pnsent << endl;
 *   			nbytes+=*pnsent;
 *   			cout << "request sent..." << endl;
 *   		}
 *   		break;
 *   	case INTERNET_STATUS_REQUEST_COMPLETE:
 *   		{
 *   			INTERNET_ASYNC_RESULT *pAsyncRes = (INTERNET_ASYNC_RESULT *)lpvStatusInformation;
 *   			cout << "Function call finished" << endl;
 *   			cout << "dwResult: " << pAsyncRes->dwResult << endl;
 *   			cout << "dwError:  " << pAsyncRes->dwError << endl;
 *   			cout.flush();
 *   			pcontext->SetCompleteRequest();
 *    			cout << "request complete..." << endl;		
 *   		}
 *   		break;
 *    	}
 *    	::LeaveCriticalSection(&__cs);
 *    
 *    	return;
 *   }
 *   
 *   int main(int argc, char *argv[]){	
 *   
 *   	::InitializeCriticalSection(&__cs);
 *   
 *   	AsDown client(3);
 *   
 *   	if(client.Connect("http://gooshin.zzem.net", __getstatus)){
 *   
 *   		__wtstart(client);
 *   
 *   		client.Request("/test.php");
 *   		Sleep(5000);
 *   
 *   		client.InitializePostArguments();
 *   		client.AddPostArgument("f[]", "d:\\log1.txt", true);
 *   		client.AddPostArgument("f[]", "d:\\log2.txt", true);
 *   		client.AddPostArgument("f[]", "d:\\log3.txt", true);
 *   		client.Request("/test.php", AsDown::reqPostMultipartsFormdata);
 *   		Sleep(5000);
 *   
 *   		client.InitializePostArguments();
 *   		client.AddPostArgument("f", "sss");
 *   		client.Request("/test2.php", AsDown::reqPost);		
 *   		Sleep(5000);
 *   		
 *   		__wtwait(client);
 *   		client.Close();
 *   	}
 *   
 *   	::DeleteCriticalSection(&__cs);
 *   
 *   	return 0;
 *   }
 *
 */

#ifdef WIN32

#ifndef __DALLY_HTTP_CLIENT
#define __DALLY_HTTP_CLIENT

#pragma warning(disable:4786)

#include <windows.h>
#include <winreg.h>
#include <wininet.h>
#include <string>
#include <list>
#include <cstdio>

#pragma comment(lib, "wininet.lib")

#define __W3_DEFAULT_AGENT "Mozilla/4.0 (compatible; )"
#define __DEFAULT_BOUNDRY_TAG "--MULTI-PARTS-FORM-DATA-BOUNDARY-"
#define __SIZE_HTTP_HEAD_LINE	2048

	void __w3curlparse(const char *szurl,
										char *szprotocol, char *szuser, char *szpassword,
										char *szaddress, unsigned long &nport, char *szuri);

	// synchronized www client
	class W3Client {
	public:
		enum w3t { w3ftp, w3http, w3https };
		enum w3m { reqGet, reqPost, reqPostMultipartsFormdata };
	private:
		typedef struct __HTTP_ARG {
			std::string name;
			std::string value;
			bool f;
			__HTTP_ARG(const char *szn, const char *szv, bool b=false): name(szn), value(szv) { if(b) f=true; else f=false;	}
			__HTTP_ARG(const char *szn, const int v): name(szn), f(false) { char t[15]="\0"; sprintf(t, "%d", v); value=t; }
			__HTTP_ARG(const char *szn, const long v): name(szn), f(false) { char t[15]="\0"; sprintf(t, "%d", v); value=t; }
			__HTTP_ARG(const char *szn, const float v): name(szn), f(false) { char t[15]="\0"; sprintf(t, "%f", v); value=t; }
			__HTTP_ARG(const char *szn, const double v): name(szn), f(false) { char t[15]="\0"; sprintf(t, "%f", v); value=t; }
			const char *type(){
				static char szt[1024]="\0";
				long nlen=1024;
				unsigned long ndot=0;

				for(ndot=name.length(); ndot>0; ndot--)
					if(!strncmp( name.c_str()+ndot, ".", 1))
						break;

				HKEY	hKEY;
				const char *szword=name.c_str()+ndot;

				if(RegOpenKeyEx(HKEY_CLASSES_ROOT, szword, 0, KEY_QUERY_VALUE, &hKEY)==ERROR_SUCCESS){
					if(RegQueryValueEx(hKEY, TEXT("Content Type"), NULL, NULL, (LPBYTE)szt, (unsigned long*)&nlen)!=ERROR_SUCCESS)
						strncpy(szt, "application/octet-stream", strlen("application/octet-stream"));
					RegCloseKey(hKEY);
				}else{
					strncpy( szt, "application/octet-stream", strlen("application/octet-stream"));
				}
				return szt;
			}
			unsigned long length(){	return name.length()+value.length()+1; }
			unsigned long dump(unsigned char *buf, unsigned long s){
				memcpy(buf, name.c_str(), name.length());
				memcpy(buf+name.length(), "=", 1);
				memcpy(buf+name.length()+1, value.c_str(), value.length());
				return name.length()+value.length()+1;
			}
			unsigned long length2() {
				unsigned long len=0;
				if(f){
					HANDLE hFile=::CreateFile(value.c_str(), 
														GENERIC_READ, // desired access
														FILE_SHARE_READ, // share mode
														NULL, // security attribute
														OPEN_EXISTING, // create disposition
														FILE_ATTRIBUTE_NORMAL, // flag and attributes
														NULL); // template file handle

					len=__SIZE_HTTP_HEAD_LINE*3+::GetFileSize(hFile, NULL);
					::CloseHandle(hFile);			
				}else
					len=__SIZE_HTTP_HEAD_LINE*4;
				return len;
			}
			unsigned long dump2(unsigned char *buf, unsigned long s, const char *boundry=__DEFAULT_BOUNDRY_TAG){
				unsigned long l=0;
				if(f){ // file
					/*
					sprintf( reinterpret_cast<char*>(buf),
								"--%s\r\n"
								"Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n"
								"\r\n"
								"%s\r\n",
								boundry, name.c_str(), value.c_str(), type());
					l=2+strlen(boundry)+2+38+name.length()+13+value.length()+5+strlen(type())+2;
					*/

					sprintf( reinterpret_cast<char*>(buf),
								"--%s\r\n"
								"Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n"
								"\r\n",
								boundry, name.c_str(), value.c_str());
					l=2+strlen(boundry)+2+38+name.length()+13+value.length()+5;

					HANDLE hFile=::CreateFile(value.c_str(), 
																GENERIC_READ, // desired access
																FILE_SHARE_READ, // share mode
																NULL, // security attribute
																OPEN_EXISTING, // create disposition
																FILE_ATTRIBUTE_NORMAL, // flag and attributes
																NULL); // template file handle
					
					if(hFile && hFile!=INVALID_HANDLE_VALUE){

						unsigned long ns=::GetFileSize(hFile, NULL);
						unsigned char *pbuf=buf+l;
						unsigned long nread=0;
						unsigned long nt=0;
	
						while(::ReadFile(hFile, pbuf+nt, 1024, &nread, NULL) && nread>0 && nt<=ns)
							nt+=nread;

						memcpy(&(buf[l+nt]), "\r\n", 2);
						::CloseHandle(hFile);

						l+=nt;
						l+=2;
					}
				}else{ // general form data
					sprintf( reinterpret_cast<char*>(buf),
								"--%s\r\n"
								"Content-Disposition: form-data; name=\"%s\"\r\n"
								"\r\n"
								"%s\r\n",
								boundry, name.c_str(), value.c_str());
					l=2+strlen(boundry)+2+38+name.length()+5+value.length()+2;
				}
				return l;
			}			
		} HTTP_ARG, *PHTTP_ARG;

		typedef struct __HTTP_COOKIE {
			std::string name;
			std::string value;
			__HTTP_COOKIE(const __HTTP_COOKIE& c): name(c.name), value(c.value) {}
			__HTTP_COOKIE(const char *szn, const char*szv): name(szn), value(szv) {}
			__HTTP_COOKIE(const char *szn, const int v): name(szn) { char t[15]="\0"; sprintf(t, "%d", v); value=t; }
			__HTTP_COOKIE(const char *szn, const long v): name(szn) { char t[15]="\0"; sprintf(t, "%d", v); value=t; }
			__HTTP_COOKIE(const char *szn, const float v): name(szn) { char t[15]="\0"; sprintf(t, "%f", v); value=t; }
			__HTTP_COOKIE(const char *szn, const double v): name(szn) { char t[15]="\0"; sprintf(t, "%f", v); value=t; }
		} HTTP_COOKIE, *PHTTP_COOKIE;
	public:
		W3Client(){ _hOpen=NULL; _hConnection=NULL, _hRequest=NULL; }
		virtual ~W3Client(){ InitializePostArguments(); InitializeCookies();}
	public:		
		bool Connect(const char *szaddress,
								const char *szuser=NULL, const char *szpassword=NULL, const char *szagent=__W3_DEFAULT_AGENT);
		virtual bool Connect(const char *szaddress,	long nport,
											const char *szuser=NULL, const char *szpassword=NULL,
											w3t t=w3http, const char *szagent=__W3_DEFAULT_AGENT);
		const char *GetURI(){ return _szuri.c_str(); }
		void Close();

		void InitializePostArguments();
		void AddPostArgument(const char *szname, const int nvalue);
		void AddPostArgument(const char *szname, const long nvalue);
		void AddPostArgument(const char *szname, const float nvalue);
		void AddPostArgument(const char *szname, const double nvalue);
		void AddPostArgument(const char *szname, const char *szvalue, bool bfile=false);
		
		void InitializeCookies();
		void AddCookie(const char *szname, const double value);
		void AddCookie(const char *szname, const float value);
		void AddCookie(const char *szname, const long value);
		void AddCookie(const char *szname, const int value);		
		void AddCookie(const char *szname, const char *szvalue);

		bool Request(const char *szuri, w3m m=reqGet, const char *szref=NULL);
		unsigned long Response(unsigned char *buf, unsigned long len);
		unsigned int QueryResult();
		const char * QueryContentType();
		unsigned long QueryContentLength();
		unsigned long QueryCookie(unsigned char *buf, unsigned long len, unsigned long idx=0);
		unsigned long QueryRawHeader(unsigned char *buf, unsigned long len);

		bool PutFile(const char *szuri, const char *szfile, bool ascii=false);
		bool GetFile(const char *szuri, const char *szfile, bool ascii=false);
		unsigned long PutFile(const char *szuri, unsigned char *buf, unsigned long len, bool ascii=false);
		unsigned long GetFile(const char *szuri, unsigned char *buf, unsigned long len, bool ascii=false);

	protected:
		unsigned long GetMultiPartsFormDataLength();
		void FreeMultiPartsFormData(unsigned char *buf);
		unsigned long AllocMultiPartsFormData(unsigned char *&buf, const char *szboundry=__DEFAULT_BOUNDRY_TAG);
		unsigned long GetPostData(unsigned char *buf, unsigned long len);
		unsigned long GetPostArgumentsLength();
	private:
		virtual bool RequestPost2(const char *szuri, const char *szref=NULL);
		virtual bool RequestPost(const char *szuri, const char *szref=NULL);
		virtual bool RequestGet(const char *szuri, const char *szref=NULL);
	protected:
		HINTERNET _hOpen; // internet open handle
		HINTERNET _hConnection; // internet connection handle
		HINTERNET _hRequest; // internet request handle
		std::string _szaddress;
		std::string _szuser;
		std::string _szpassword;
		std::string _szuri;
		long _nport;
		w3t _t;

		std::list<HTTP_ARG*> _listargs;
		std::list<HTTP_COOKIE*> _listcookies;
	};

	// Asynchronized www client
	class AsyncW3Client : public W3Client {
	public:
		AsyncW3Client():W3Client(){_hCompleteRequestEvent=NULL;}
	public:
		bool Connect(const char *szaddress,
												INTERNET_STATUS_CALLBACK lpfn,
												const char *szuser=NULL,
												const char *szpassword=NULL,
												const char *szagent=__W3_DEFAULT_AGENT);
		bool Connect(const char *szaddress,	long nport,
								INTERNET_STATUS_CALLBACK lpfn,
								const char *szuser=NULL, const char *szpassword=NULL,
								w3t t=w3http, const char *szagent=__W3_DEFAULT_AGENT);
		bool Request(const char *szuri, w3m m=reqGet, const char *szref=NULL){
			_hCompleteRequestEvent=::CreateEvent(NULL, FALSE, FALSE, NULL);
			return W3Client::Request(szuri, m, szref);
		}
		unsigned long Response(unsigned char *buf, unsigned long len){
			::CloseHandle(_hCompleteRequestEvent);
			_hCompleteRequestEvent=NULL;
			return W3Client::Response(buf, len);
		}
	public:
		void SetCompleteRequest();
		bool WaitCompleteRequest(unsigned long ntime=INFINITE);
	private:
		virtual bool RequestPost2(const char *szuri, const char *szref=NULL);
		virtual bool RequestPost(const char *szuri, const char *szref=NULL);
		virtual bool RequestGet(const char *szuri, const char *szref=NULL);
	private:
		HANDLE _hCompleteRequestEvent;
	};

#endif // !defined(__DALLY_HTTP_CLIENT)

#endif // defined(WIN32)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美美哒免费高清在线观看视频一区二区| 国产精品国产三级国产有无不卡 | 免费观看在线综合色| 亚洲一区二区三区国产| 综合久久国产九一剧情麻豆| 国产农村妇女毛片精品久久麻豆 | 五月婷婷另类国产| 亚洲国产精品一区二区尤物区| 亚洲码国产岛国毛片在线| 成人免费一区二区三区视频 | 欧美日韩在线播放三区| 欧美日韩国产在线观看| 欧美一区二区三区不卡| 日韩亚洲欧美在线| 久久久久国色av免费看影院| 国产精品三级电影| 亚洲一区二区三区四区的| 日韩专区欧美专区| 精品在线播放免费| 成人av午夜电影| 欧美日韩免费一区二区三区视频| 91精品国产aⅴ一区二区| 精品88久久久久88久久久| 国产精品乱子久久久久| 亚洲尤物视频在线| 久久国产综合精品| 91日韩在线专区| 欧美精品日韩精品| 久久精品欧美日韩| 亚洲精品中文字幕乱码三区| 琪琪一区二区三区| 国产91色综合久久免费分享| 色av成人天堂桃色av| 欧美一级午夜免费电影| 亚洲欧洲精品一区二区三区 | 日韩三级伦理片妻子的秘密按摩| 国产色一区二区| 亚洲第一av色| 成人深夜在线观看| 91精品国产手机| 亚洲天堂中文字幕| 激情小说欧美图片| 欧洲国内综合视频| 久久久久久免费网| 日韩国产欧美在线观看| 国产成人综合网| 日韩欧美综合一区| 亚洲自拍偷拍麻豆| 成人看片黄a免费看在线| 51午夜精品国产| 一区二区三区四区精品在线视频| 国内精品视频一区二区三区八戒| 欧洲另类一二三四区| 国产精品久久综合| 国产一区二区美女| 欧美成人猛片aaaaaaa| 一区二区三区在线视频播放| 成人av在线资源| 久久久久免费观看| 久久99国产精品麻豆| 欧美精品三级日韩久久| 亚洲综合丁香婷婷六月香| 91女厕偷拍女厕偷拍高清| 久久久久久97三级| 国产成人综合精品三级| 欧美大片在线观看| 日本人妖一区二区| 欧美猛男男办公室激情| 亚洲精选视频免费看| 色综合久久久久综合| 国产精品三级av| a美女胸又www黄视频久久| 中文成人综合网| 91在线你懂得| 亚洲欧美偷拍卡通变态| 97久久精品人人爽人人爽蜜臀| 国产片一区二区| 成人激情电影免费在线观看| 国产精品免费久久久久| 一本一道波多野结衣一区二区| 综合久久一区二区三区| 色系网站成人免费| 亚洲电影视频在线| 日韩一区二区不卡| 国产精品一区二区在线观看网站| 久久夜色精品一区| 成人激情av网| 亚洲一线二线三线久久久| 色婷婷av一区二区三区gif| 亚洲乱码国产乱码精品精可以看 | 久久99在线观看| 久久综合色8888| 国产成人精品免费| 亚洲美女免费在线| 日韩午夜中文字幕| 国产精品一二三| 亚洲视频一区二区在线| 欧美日韩免费一区二区三区视频 | 亚洲精品一区二区三区福利| 风间由美一区二区av101| 亚洲特级片在线| 欧美另类z0zxhd电影| 狠狠色2019综合网| 中文字幕欧美一区| 欧美日本视频在线| 国产.欧美.日韩| 亚洲大片精品永久免费| 日韩欧美亚洲国产另类| 成人性色生活片| 亚洲国产精品自拍| 欧美高清在线精品一区| 欧美综合一区二区三区| 日韩av一二三| 国产精品久久久久久久久搜平片 | 久久久精品tv| 欧美亚洲国产bt| 国产成人亚洲综合a∨婷婷 | 欧美成人一区二区| 成人h版在线观看| 亚洲成av人影院在线观看网| 国产日产精品1区| 4438成人网| 日本丶国产丶欧美色综合| 国产一区二区视频在线播放| 亚洲一级在线观看| 国产精品视频免费| 精品成a人在线观看| 欧美日韩亚洲另类| 成人午夜av影视| 国产一区二区三区综合| 婷婷综合另类小说色区| 亚洲三级免费电影| 国产人成一区二区三区影院| 欧美一级久久久久久久大片| 欧美亚洲丝袜传媒另类| 91亚洲资源网| 成人毛片视频在线观看| 国产成人亚洲综合色影视| 国内成+人亚洲+欧美+综合在线| 一区二区三区精品在线| 亚洲品质自拍视频网站| 国产精品网站在线| 久久伊人蜜桃av一区二区| 91精品欧美福利在线观看| 欧美日韩在线播放一区| 欧美三级电影精品| 欧美日韩在线播放三区| 91成人国产精品| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 中文字幕在线观看不卡| 欧美经典一区二区| 国产精品色在线| 亚洲欧美在线aaa| 1区2区3区欧美| 自拍av一区二区三区| **欧美大码日韩| 亚洲精品国产a久久久久久| 一区精品在线播放| 亚洲靠逼com| 亚洲午夜一区二区| 亚洲自拍偷拍欧美| 性感美女极品91精品| 亚洲成人先锋电影| 日本怡春院一区二区| 天天亚洲美女在线视频| 青青草成人在线观看| 国产在线精品一区二区不卡了| 国产精一区二区三区| 成人免费高清在线| 91丨九色丨蝌蚪富婆spa| 在线免费观看成人短视频| 欧美日韩成人激情| 精品国产不卡一区二区三区| 国产丝袜在线精品| 亚洲人成电影网站色mp4| 亚洲成人tv网| 国产在线精品不卡| 色综合天天综合网国产成人综合天| 色综合久久99| 欧美电影一区二区| 久久久精品国产免费观看同学| 亚洲日穴在线视频| 青草国产精品久久久久久| 成人综合婷婷国产精品久久免费| 成人激情校园春色| 欧美剧情片在线观看| 国产午夜亚洲精品不卡| 国产精品久久久久久久蜜臀 | 国产婷婷精品av在线| 一区二区激情小说| 国产精品一区二区黑丝| 日本精品免费观看高清观看| 亚洲精品一区二区三区蜜桃下载| 中文字幕一区二区三区在线观看 | 自拍偷自拍亚洲精品播放| 日日夜夜免费精品视频| 99久久精品一区| 精品国产91亚洲一区二区三区婷婷| 国产精品麻豆网站| 国产麻豆视频一区|