dmpapacheserverrequest.cpp 4.0 KB
#include "dmpapacheserverrequest.h"
#include "dmplogger.h"
#include <string.h>


DmpApacheServerRequest::DmpApacheServerRequest(FCGX_ParamArray& evnp,FCGX_Stream *in,FCGX_Stream*out,FCGX_Stream *err)
{
  std::string addr=FCGX_GetParam("REMOTE_ADDR", evnp);
	std::string port=FCGX_GetParam("REMOTE_PORT", evnp);
	//请求的url
	std::string uri=FCGX_GetParam("REQUEST_URI", evnp);
  
  domain_=addr;
  port_=port;
  char *pRequestMoethod = FCGX_GetParam("REQUEST_METHOD", evnp);
  const char* med= pRequestMoethod;
  if (med)
    {
        if (strcmp(med,"POST") == 0)
        {
          setMethod(POST_METHOD);
          //获取请求中URL携带的参数
          query_ = FCGX_GetParam("QUERY_STRING", evnp);
          //获取POST请求携带的参数长度
          char *pLenstr = FCGX_GetParam("CONTENT_LENGTH", evnp);
          if(pLenstr != NULL)
          {
                    data_len_  = atoi(pLenstr);
                    std::string postData;
                    //获取POST携带的数据
                    for(int i = 0; i < (int)data_len_; i++)
                    {
                        int ch = FCGX_GetChar(in);
                        if(ch < 0)
                        {
                            break;
                        }
                        postData += (char)ch;
                    }
                    SetContext(postData);                   
                }
        }
        else
        {
          //Get请求方式
          query_ = FCGX_GetParam("QUERY_STRING", evnp);          
          setMethod(GET_METHOD);
        }
        setQuery(query_);
        setPath(uri);
        //添加请求头
        setParameter("Accept", FCGX_GetParam("HTTP_ACCEPT", evnp));
        setParameter("Accept-Encoding", FCGX_GetParam("HTTP_ACCEPT_ENCODING", evnp));
        setParameter("Accept-Language", FCGX_GetParam("HTTP_ACCEPT_LANGUAGE", evnp));
        //SetParameter("Cache-Control", FCGX_GetParam("HTTP_CACHE_CONTROL", evnp));
        setParameter("Connection", FCGX_GetParam("HTTP_CONNECTION", evnp));
        setParameter("Host", FCGX_GetParam("HTTP_HOST", evnp));
        setParameter("User-Agent", FCGX_GetParam("HTTP_USER_AGENT", evnp));

    }
	
}

DmpApacheServerRequest::DmpApacheServerRequest(CgiENV &env)
{
  
  const char* med= env.REQUEST_METHOD.c_str();
  if (med)
    {
        if (strcmp(med,"POST") == 0)
        {
          setMethod(POST_METHOD);
          //获取请求中URL携带的参数
          query_ = env.QUERY_STRING;
          //获取POST请求携带的参数长度
          char *pLenstr = nullptr;
          if(pLenstr != NULL)
          {
                    data_len_  = atoi(pLenstr);
                    std::string postData;
                    //获取POST携带的数据
                    for(int i = 0; i < (int)data_len_; i++)
                    {
                      /*
                        int ch = FCGX_GetChar(in);
                        if(ch < 0)
                        {
                            break;
                        }
                      
                        postData += (char)ch;*/
                    }
                    SetContext(postData);                   
                }
        }
        else
        {
          //Get请求方式
          query_ = env.QUERY_STRING;      
          setMethod(GET_METHOD);
        }
    }
  setQuery(query_);
  setPath(env.REQUEST_URI);
  //添加请求头
  setParameter("Accept", env.HTTP_ACCEPT);
  setParameter("Accept-Encoding", env.HTTP_ACCEPT_ENCODING);
  //SetParameter("Accept-Language", env.HTTP_ACCEPT_LANGUAGE);
  //SetParameter("Connection", env.HTTP_CONNECTION);
  setParameter("Host", env.HTTP_HOST);
  setParameter("User-Agent", env.HTTP_USER_AGENT);
  

}

const void * DmpApacheServerRequest::GetData() const 
{
   return data_;
}
int DmpApacheServerRequest::GetDataLength() const
{
   return data_len_;
}
void DmpApacheServerRequest::SetContext(std::string & strdata)
{
   data_=strdata.c_str();
}