zoukankan      html  css  js  c++  java
  • 解析HTTP报文头

    #include <sstream>
    #include <string>
    
    #define BUFFER_SIZE   256
    
    const char g_szHeader[] = "HTTP/1.1 200 OK\r\n"
                              "Connection: Keey-Live\r\n"
                              "Content-Type: text/xml\r\n\r\n";
    
    // 响应报文头解析
    bool HttpRespHeaderPrase(const std::string& strHeader)
    {
    	if ( strHeader.empty() )
    	{
    		return false;
    	}
    
    	// 行缓冲区
    	char szLineBuf[BUFFER_SIZE] = {0};
    
    	// 通过流来提取报文头中内容
    	std::stringstream ssHeader(strHeader.c_str());
    
    	// 提取第一行内容
    	ssHeader.getline(szLineBuf, sizeof(szLineBuf), '\r');
    
    	// 获取HTTP版本
    	char szHttpVersion[BUFFER_SIZE] = {0};
    	sscanf(szLineBuf, "HTTP/%[^ ]", szHttpVersion);
    
    	// 获取状态码
    	strtok(szLineBuf," ");
    	int iStatusCode = atoi(strtok(NULL, " "));
    
    	// 逐行提取余下的报文参数名值对
    	std::string strParamName;
    	std::string strParamValue;
    	for (;;)
    	{
    		// 提取一行内容
    		ssHeader.getline(szLineBuf, sizeof(szLineBuf), '\r');
    
    		// 跳过参数名之前的无效字符
    		size_t count = strspn(szLineBuf, "\r\n ");
    
    		// 有效起始地址
    		char* start = szLineBuf + count;
    		
    		// 解析完毕
    		if ( 0 == strlen(start) )
    		{
    			break;
    		}
    
    		// 查找冒号出现的位置
    		char* p = strchr(start, ':');
    		if ( p - start > 0 )
    		{
    			strParamName.assign(start, p - start);
    		}
    		else
    		{
    			// 解析出错
    			return false;
    		}
    
    		// 跳过无效字符
    		count = strspn(p, ": ");
    		strParamValue.assign(p + count);
    	}
    
    	return true;
    }
    
    
    int main(int argc, char* argv[])
    {
    	HttpRespHeaderPrase(std::string(g_szHeader));
    
    	return 0; 
    }
    
  • 相关阅读:
    机器学习周志华- 第六章学习笔记6.1-6.4
    Centos 中 vim 的配置
    github相关的软件安装及配置
    堆/栈的比较 以及 malloc/new动态内存的开辟
    内存管理
    Linux中的搜索命令
    String 类 Copy-On-Write 技术以及使用时存在的风险
    二分查找算法的应用
    二分查找算法
    union关键字 与大小端模式
  • 原文地址:https://www.cnblogs.com/csuchao/p/2074751.html
Copyright © 2011-2022 走看看