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

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

?? request.cpp

?? 初學者學習HTTP協議的有用代碼
?? CPP
字號:
// Request.cpp: implementation of the Request class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HttpLook.h"
#include "Request.h"

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

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

Request::Request()
{

}

Request::~Request()
{

}
void Request::MenBufferCreate(MemBuffer &m)
{
	m.size=MEM_BUFFER_SIZE;
	m.buffer=(unsigned char *)malloc(m.size);
	m.position=m.buffer;
	return;
}
void Request::MenBufferGrow(MemBuffer &m)
{
	size_t sz;
    sz = m.position - m.buffer;
	m.size=m.size*2;
	m.buffer=(unsigned char *)realloc(m.buffer,m.size);
	m.position=m.buffer+sz;
}
void Request::MenBufferAddbyte(MemBuffer &m,BYTE byte)
{
	if((size_t)(m.position-m.buffer)>=m.size)
	{
		MenBufferGrow(m);
	}
	*m.position=byte;
	m.position++;
}
void Request::MenBufferAdd(MemBuffer &m,unsigned char * buffer,size_t size)
{
	size_t sz=(size_t)(m.position-m.buffer);
	while(sz+size>=m.size)
	{
		MenBufferGrow(m);
		if(sz+size<m.size)
			break;
	}
	memcpy(m.position,buffer,size);
	m.position+=size;
}
void Request::SendRequest(LPCSTR url,HWND hwnd,int nIsPost,CString &strHeaderPost,CString &strHeaderSend,
						  CString &strHeaderRecive,CString &strMessage)
{
 	HTTPRequest			req;
    int					i,rtn;
    LPSTR				buffer;
    req.headerSend							= NULL;
	req.headerReceive						= NULL;
    req.message								= NULL;
    //Read in arguments
    
	if(nIsPost)
    {													/* POST */
		i		= strHeaderPost.GetLength();
		buffer  = (char*) malloc(i+1);
		strcpy(buffer, (LPCTSTR)strHeaderPost);
		rtn	= SendHttp(	url,
						hwnd,
						"Content-Type: application/x-www-form-urlencoded\r\n",
						(unsigned char*)buffer,
						i,
						&req);  
        free(buffer);
    }
    else												/* GET */
        rtn = SendHttp(url,hwnd,NULL,NULL,0,&req);
	if(!rtn)											//Output message and/or headerSend 
	{
		strHeaderSend		= req.headerSend;
		strHeaderRecive	= req.headerReceive;
		strMessage			= req.message;
		free(req.headerSend);
		free(req.headerReceive);
        free(req.message);
    }
    else
		SendMessage(hwnd,WM_SENDMESSAGE,3,0);
}

int Request::SendHttp(LPCSTR url,HWND hwnd,LPCSTR headerReceive,BYTE *post,
					   DWORD postLength,HTTPRequest *req)
{
	WSADATA			WsaData;
	SOCKADDR_IN		sin;
    SOCKET			sock;
    char			buffer[512];
    CString			protocol,host,request;
    int				l,port,chars,err;
    MemBuffer		headersBuffer,messageBuffer;
	char			headerSend[1024];
    BOOL			done;
	ParseURL(url,protocol,host,request,port);
	if(protocol!="HTTP")
		return 1;
	err=WSAStartup(0x0101,&WsaData);
	if(err!=0)
		return 1;
	sock=socket(AF_INET,SOCK_STREAM,0);
	if (sock == INVALID_SOCKET)
       return 1;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(port);
	sin.sin_addr.S_un.S_addr = GetHostAddress(host);
	SendMessage(hwnd,WM_SENDMESSAGE,1,0);
	if( connect(sock,(LPSOCKADDR)&sin, sizeof(SOCKADDR_IN))==SOCKET_ERROR)
	{
        return 1;		
	}
	SendMessage(hwnd,WM_SENDMESSAGE,2,0);
	
////////////////////////////發送請求頭////////////////
	if( post == NULL )
	{
		SendMessage(hwnd,WM_SENDMESSAGE,4,0);
        SendString(sock,"GET ");
		strcpy(headerSend, "GET ");
	}
    else 
	{
		SendMessage(hwnd,WM_SENDMESSAGE,5,0);
		SendString(sock,"POST ");
		strcpy(headerSend, "POST ");
	}
//發送請求的內容(必選)
	  SendString(sock,request);
		strcat(headerSend, request);
//發送協議版本(必選)
    SendString(sock," HTTP/1.0\r\n");
		strcat(headerSend, " HTTP/1.0\r\n");
//指定客戶能處理的頁面類型(可選)
    SendString(sock,"Accept: image/gif, image/x-xbitmap,"
        " image/jpeg, image/pjpeg, application/vnd.ms-excel,"
        " application/msword, application/vnd.ms-powerpoint,"
        " */*\r\n");
		strcat(headerSend, "Accept: image/gif, image/x-xbitmap,"
        " image/jpeg, image/pjpeg, application/vnd.ms-excel,"
        " application/msword, application/vnd.ms-powerpoint,"
        " */*\r\n");
//指定客戶能處理的自然語言(可選)
    SendString(sock,"Accept-Language: en-us\r\n");
		strcat(headerSend, "Accept-Language: en-us\r\n");
//指定客戶能處理的頁面編碼方法(可選)
    SendString(sock,"Accept-Encoding: gzip, deflate\r\n");
		strcat(headerSend, "Accept-Encoding: gzip, deflate\r\n");
//描述瀏覽器的信息(可選)
   SendString(sock,"User-Agent: Mozilla/4.0\r\n");
		strcat(headerSend, "User-Agent: Mozilla/4.0\r\n");
   //以字節計算頁面的長度
	if(postLength)
    {
        wsprintf(buffer,"Content-Length: %ld\r\n",postLength);
        SendString(sock,buffer);
		strcat(headerSend, buffer);
    }
	//發送服務器DNS名字(必選)
   SendString(sock,"Host: ");
		strcat(headerSend, "Host: ");
    SendString(sock,host);
		strcat(headerSend, (LPCSTR)host);
	SendString(sock,"\r\n");
		strcat(headerSend, "\r\n");

//發送Post請求的頭信息
   if( (headerReceive!=NULL) && *headerReceive )
	{
        SendString(sock,headerReceive);
		strcat(headerSend, headerReceive);
	}
 
  // Send a blank line to signal end of HTTP headerReceive 請求頭信息結束 
    SendString(sock,"\r\n");							
	strcat(headerSend, "\r\n");

	SendMessage(hwnd,WM_SENDMESSAGE,6,0);

//發送請求體,在請求類型為post時,是請求的類容
    if( (post!=NULL) && postLength )
	{
        send(sock,(const char*)post,postLength,0);
		post[postLength]	= '\0';		
		strcat(headerSend, (const char*)post);
		SendMessage(hwnd,WM_SENDMESSAGE,7,0);
	}
//保存請求頭信息
	req->headerSend		= (char*) malloc( sizeof(char*) * strlen(headerSend));
	strcpy(req->headerSend, (char*) headerSend );

////////////////////////////////接受服務器端數據///////////////////
    MenBufferCreate(headersBuffer);
    chars = 0;
    done = FALSE;
	SendMessage(hwnd,WM_SENDMESSAGE,8,0);
    while(!done)
    {
        l = recv(sock,buffer,1,0);
        if(l<0)
            done=TRUE;

        switch(*buffer)
        {
            case '\r':
                break;
            case '\n'://連續兩個換行表示存在一空行,響應頭結束
                if(chars==0)
				{
                    done = TRUE;
				}
                chars=0;
                break;
            default:
                chars++;
                break;
        }
        MenBufferAddbyte(headersBuffer,*buffer);
    }
	SendMessage(hwnd,WM_SENDMESSAGE,9,0);
    req->headerReceive	= (char*) headersBuffer.buffer;
    *(headersBuffer.position) = 0;

    MenBufferCreate(messageBuffer);	// Now read the HTTP body
	SendMessage(hwnd,WM_SENDMESSAGE,10,0);
    do
    {
        l = recv(sock,buffer,sizeof(buffer)-1,0);
        if(l<0)
            break;
        *(buffer+l)=0;
        MenBufferAdd(messageBuffer, (unsigned char*)&buffer, l);
    } while(l>0);
	SendMessage(hwnd,WM_SENDMESSAGE,11,0);
    *messageBuffer.position = 0;
    req->message = (char*) messageBuffer.buffer;
    req->messageLength = (messageBuffer.position - messageBuffer.buffer);

    closesocket(sock);// Cleanup
	SendMessage(hwnd,WM_SENDMESSAGE,12,0);
	return 0;
}
void Request::ParseURL(LPCSTR url,CString &protocol,CString &host,CString &request,int &port)
{
	CString strURL,strhost,strrequest,strport;
	strURL.Format("%s",url);
	strURL.TrimLeft();
//	ValidURL(strURL);
	strhost=host;
	strrequest=request;
	protocol="HTTP";
	int nPro=strURL.Find("http://"),nPos;
	if(nPro!=-1)
	{
		nPos=strURL.Find(':');
		nPos++;
		if(strURL.GetAt(nPos)=='/')
		{
			nPos+=2;
		}
	}
	else
		nPos=0;
	char ptrhost[256];
	int i=0;
	TCHAR c=strURL.GetAt(nPos);
	while(c!=':' && c!='/')//讀取主機名
	{					
		ptrhost[i]=c;
		nPos++,i++;		
		if(nPos>=strURL.GetLength())
			break;
		c=strURL.GetAt(nPos);
	}
	if(ptrhost[i]!='\0')
		ptrhost[i]='\0';
	strhost.Format("%s",ptrhost);
	if(nPos<strURL.GetLength())//判斷是否已到URL末端
	{//1
		c=strURL.GetAt(nPos);
		char ptrport[256];
		i=0;
		if(c==':')
		{//2	
			nPos++;	
			c=strURL.GetAt(nPos);
			while(c!='/')
			{//3	
				ptrhost[i]=c;
				nPos++,i++;				
				if(nPos>=strURL.GetLength())
					break;
				c=strURL.GetAt(nPos);
				if(c<48 && c>57)
				{
					AfxMessageBox("端口號中不能有非數字字符,請重輸!");
					break;
				}			
			}//3'
			if(ptrport[i]!='\0')
				ptrport[i]='\0';
			strport.Format("%s",ptrport);
		}//2
		else
			strport="80";
		if(c=='/')//2'
			strrequest=strURL.Right(strURL.GetLength()-nPos);
		else
			strrequest="/";
	}//1
	else
	{
		strport="80" ,strrequest="/";
	}
	host=strhost,port=atoi(strport),request=strrequest;
}
DWORD Request::GetHostAddress(LPCSTR host)
{
    struct hostent *phe;
    char *p;
   phe = gethostbyname( host );           
    if(phe==NULL)
        return 0;  
    p = *phe->h_addr_list;
    return *((DWORD*)p);
}
void Request::SendString(SOCKET sock,LPCSTR str)
{
    send(sock,str,strlen(str),0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人v欧美综合天堂 | 日本在线不卡视频一二三区| 国产视频不卡一区| 久久久综合精品| 日韩欧美国产1| 日韩欧美高清一区| 日韩精品一区二区三区中文不卡| 欧美电影影音先锋| 欧美一区二区三区视频在线观看| 91精品国产91久久综合桃花 | 99国产欧美久久久精品| 成人午夜精品在线| 91在线云播放| 精品视频在线免费看| 欧美日韩激情一区二区三区| 欧美一区二区三区四区五区 | 精品国产电影一区二区| 国产视频一区不卡| 亚洲三级电影网站| 亚洲一区二区视频在线观看| 亚洲国产精品一区二区www | 激情综合色播五月| 国产成人精品免费| 欧美午夜精品一区二区三区| 日韩一级免费一区| 国产日韩精品一区| 亚洲一区二区三区精品在线| 久久er精品视频| 成人午夜电影久久影院| 成人aaaa免费全部观看| 欧美调教femdomvk| 久久久99精品久久| 亚洲综合精品自拍| 激情欧美日韩一区二区| 91一区二区在线| 日韩欧美一级二级三级久久久| 国产精品免费视频观看| 午夜在线成人av| 国产精品资源网| 91福利在线免费观看| 精品播放一区二区| 一区二区三区四区蜜桃| 紧缚捆绑精品一区二区| 欧美一区二区国产| 精品日韩在线一区| 亚洲日本欧美天堂| 国产精品自拍av| 欧美系列日韩一区| 精品va天堂亚洲国产| 国产精品国产三级国产aⅴ入口| 婷婷国产在线综合| 国产69精品久久久久777| 3atv一区二区三区| 中文字幕日本不卡| 国产一区二区久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲国产视频在线| www.爱久久.com| 久久网站最新地址| 日韩国产精品91| 欧美伊人久久久久久久久影院| 欧美国产97人人爽人人喊| 日韩激情视频网站| 欧美日韩精品欧美日韩精品一| 欧美国产丝袜视频| 国产精品一线二线三线| 日韩欧美视频在线| 三级成人在线视频| 欧美久久一区二区| 亚洲国产日日夜夜| 欧美亚洲综合久久| 亚洲精品国产a久久久久久| 大白屁股一区二区视频| 欧美激情一区在线观看| 懂色av中文字幕一区二区三区 | 成人在线视频首页| 国产欧美视频一区二区三区| 国产河南妇女毛片精品久久久| 精品粉嫩超白一线天av| 美国精品在线观看| 日韩美女在线视频| 国产在线视频一区二区三区| 久久久久高清精品| 国产99一区视频免费| 欧美韩国日本综合| 成人国产精品视频| 亚洲欧美日韩中文字幕一区二区三区| 国产毛片精品视频| 国产精品麻豆久久久| 99久久久国产精品| 亚洲国产综合在线| 欧美一区二区三区视频在线| 韩日欧美一区二区三区| 国产欧美1区2区3区| 91热门视频在线观看| 一区二区三区四区亚洲| 6080日韩午夜伦伦午夜伦| 美女视频黄免费的久久| 国产女同互慰高潮91漫画| 99久久er热在这里只有精品15| 国产精品色呦呦| 欧美日韩五月天| 美女视频网站黄色亚洲| 中文av一区二区| 91成人免费网站| 日韩黄色一级片| 久久久久88色偷偷免费| 色伊人久久综合中文字幕| 性欧美疯狂xxxxbbbb| 久久在线观看免费| 欧美日韩一区国产| 国产麻豆精品一区二区| 亚洲精品中文在线影院| 日韩女优制服丝袜电影| 91免费国产视频网站| 蜜臀av国产精品久久久久| 久久精品在线观看| 欧美日本一道本在线视频| 精品一二三四在线| 亚洲一区在线观看免费观看电影高清 | 国产盗摄精品一区二区三区在线| 亚洲美女免费在线| 久久久精品欧美丰满| 欧美日韩卡一卡二| 99精品国产视频| 激情成人午夜视频| 丝袜亚洲另类欧美综合| 亚洲欧美偷拍卡通变态| 精品国产一区二区三区av性色 | 欧美成人精品3d动漫h| 99久久婷婷国产综合精品| 免费观看久久久4p| 亚洲一区二区三区四区在线| 国产女人aaa级久久久级 | 国产99精品视频| 美腿丝袜亚洲三区| 偷拍自拍另类欧美| 一区二区三区欧美久久| 国产精品美女久久久久久久久久久| 日韩一区二区三区四区| 91精品午夜视频| 欧美自拍偷拍午夜视频| 91麻豆高清视频| 波多野结衣的一区二区三区| 精品无人码麻豆乱码1区2区| 六月丁香综合在线视频| 青青国产91久久久久久| 午夜欧美一区二区三区在线播放| 夜夜精品视频一区二区| 一区二区三区高清| 一区二区三国产精华液| 亚洲一区在线视频| 亚洲成人福利片| 香蕉久久一区二区不卡无毒影院| 亚洲综合丁香婷婷六月香| 亚洲一二三四区不卡| 首页综合国产亚洲丝袜| 奇米影视在线99精品| 欧美性生活一区| 日韩精品电影在线观看| 天天综合日日夜夜精品| 日本午夜精品一区二区三区电影| 日韩中文字幕不卡| 奇米精品一区二区三区在线观看一| 日本在线不卡视频| 久久99精品久久久久久国产越南| 韩国一区二区视频| 国产精品99久久久| 99精品视频一区二区| 91热门视频在线观看| 欧美视频一区在线观看| 91精品在线观看入口| 日韩美女在线视频| 中文字幕精品一区二区精品绿巨人| 中文幕一区二区三区久久蜜桃| 亚洲三级小视频| 日日夜夜精品视频天天综合网| 免费日本视频一区| 狠狠狠色丁香婷婷综合久久五月| 成人国产精品免费网站| 欧美日韩久久一区| 久久久久久久久蜜桃| 一级特黄大欧美久久久| 久久se这里有精品| 91麻豆免费观看| 精品国产一区二区三区四区四 | 图片区小说区区亚洲影院| 久久精品国产精品亚洲综合| 成人综合激情网| 欧美日韩综合在线| 亚洲精品一区二区三区福利| 亚洲欧美日韩在线不卡| 久久69国产一区二区蜜臀| 91福利在线看| 久久综合色之久久综合| 亚洲国产乱码最新视频| 国产剧情一区二区| 欧美日本一区二区在线观看| 国产精品视频免费| 免费亚洲电影在线|