?? httpmessage.cpp
字號:
#include "StdAfx.h"
#include "HTTPMessage.h"
HTTPMessage::HTTPMessage(void)
{
iContentLength=0;
iContentStr=NULL;
iHost=NULL;
iUri=NULL;
iHttpVersion=EHTTP11;
iMethod=EGET;
iHeaderMap.insert(HeaderPair(EConnection,GetHeadName(EClose)));
}
HTTPMessage::~HTTPMessage(void)
{
delete[] iHost;
delete[] iUri;
delete[] iContentStr;
}
void HTTPMessage::Ptr(string& msg)
{
//Method
msg=GetHeadName(iMethod);
msg+=" ";
//Uri
msg+=iUri;
//GET在Uri后面加請求正文
if (iMethod==EGET)
{
msg+="?";
addContent( msg );
}
msg+=" ";
//HTTP Version
msg+=GetHeadName(iHttpVersion);
msg+="\r\n";
//Host
msg+="Host: ";
msg+=iHost;
msg+="\r\n";
//添加Header
addHeaders(msg);
//空行分隔
msg+="\r\n";
//POST加請求正文
if (iMethod==EPOST)
{
addContent( msg );
}
}
const char* HTTPMessage::GetHeadName( THTTP aHead )
{
switch(aHead)
{
case EGET:
return "GET";
case EPOST:
return "POST";
case EHEAD:
return "HEAD";
case EHTTP11:
return "HTTP/1.1";
case EHTTP10:
return "HTTP/1.0";
case EConnection:
return "Connection";
case EKeep_Alive:
return "Keep-Alive";
case EClose:
return "Close";
case EContent_Type:
return "Content-Type";
case EContent_Length:
return "Content-Length";
default:
return NULL;
}
}
void HTTPMessage::SetMethod( THTTP aMethod )
{
iMethod=aMethod;
if (iMethod==EPOST)
{
iHeaderMap.insert(HeaderPair(EContent_Type,"application/x-www-form-urlencoded"));//;charset=UTF-8
}
}
void HTTPMessage::SetHttpVersion( THTTP aHttpVersion )
{
iHttpVersion=aHttpVersion;
}
void HTTPMessage::SetUri( const char* aUri )
{
if (!aUri)
{
aUri="/index.html";
}
int length=strlen(aUri);
delete[] iUri;
iUri=new char[length+1];
strcpy(iUri,aUri);
}
void HTTPMessage::SetHost( const char* aHost )
{
int length=strlen(aHost);
delete[] iHost;
iHost=new char[length+1];
strcpy(iHost,aHost);
}
void HTTPMessage::AddHeader( THTTP aHeader,const char* aValue )
{
string value=aValue;
iHeaderMap.erase(aHeader);
iHeaderMap.insert(HeaderPair(aHeader,value));
}
void HTTPMessage::AddHeader( THTTP aHeader,THTTP aValue )
{
string value=GetHeadName(aValue);
iHeaderMap.erase(aHeader);
iHeaderMap.insert(HeaderPair(aHeader,value));
}
void HTTPMessage::AddField( const char* aFieldName,const char* aValue )
{
string field=aFieldName;
string value=aValue;
iContentMap.insert(FieldPair(field,value));
if (iContentLength>0)
{
iContentLength+=1;//加上&
}
iContentLength+=field.size();
iContentLength+=value.size();
iContentLength+=1;//=號
}
void HTTPMessage::addContent( string& msg )
{
FieldIterator it;
for (it = iContentMap.begin();
it != iContentMap.end();)
{
msg+=(it->first);
msg+="=";
msg+=(it->second);
it++;
if (it != iContentMap.end())
{
msg+="&";
}
}
if (iContentStr)
{
if (iContentMap.size()>0)
{
msg+="&";
}
msg+=iContentStr;
}
}
void HTTPMessage::AddContent( const char* aContent )
{
if (!aContent)
{
return;
}
int newLength=strlen(aContent);
int oldLength=0;
if (iContentStr)
{
oldLength=strlen(iContentStr);
char* temp=new char[oldLength+newLength+2];
strcpy(temp,iContentStr);
delete[] iContentStr;
iContentStr=temp;
strcpy(iContentStr+oldLength,"&");
oldLength++;
}
else
{
delete[] iContentStr;
iContentStr=new char[oldLength+newLength+1];
}
strcpy(iContentStr+oldLength,aContent);
iContentStr[oldLength+newLength]='\0';
if (iContentLength>0)
{
iContentLength+=1;//加上&
}
iContentLength+=newLength;
}
void HTTPMessage::addHeaders( string& msg )
{
if (iMethod==EPOST)
{
char buf[10];
_itoa_s(iContentLength,buf,10);
iHeaderMap.insert(HeaderPair(EContent_Length,buf));
}
HeaderIterator it;
for (it = iHeaderMap.begin();
it != iHeaderMap.end();it++)
{
msg+=(GetHeadName(it->first));
msg+=": ";
msg+=(it->second);
msg+="\r\n";
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -