一.概念回顾
建议先学上篇博客,再向下学习,上篇博客的链接如下:
二.http请求与响应的格式
1.http请求

2.http响应

三.http协议定制
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include "Common.hpp"
const std::string Sep = "\r\n";
const std::string LineSep = " ";
const std::string BlankLine = Sep;
class HttpRequest
{
public:
HttpRequest()
{}
~HttpRequest()
{}
void Deserialize(std::string& request_str)
{
std::cout << "#############################" << std::endl;
std::cout << "解析之前 request_str: \n" << request_str;
if(ParseOneLine(request_str,&_req_line,Sep))
{
//提取请求行内的详细字段
ParseReqLine(_req_line,LineSep);
}
std::cout << "解析之后 request_str: \n" << request_str;
Print();
std::cout << "#############################" << std::endl;
}
void Print()
{
std::cout << "#############################" << std::endl;
std::cout << "_method: " << _method << std::endl;
std::cout << "_uri: " << _uri << std::endl;
std::cout << "_version: " << _version << std::endl;
}
private:
void ParseReqLine(std::string& _req_line,const std::string sep)
{
std::stringstream ss(_req_line);
ss >> _method >> _uri >> _version;
}
private:
std::string _req_line;
std::vector<std::string> _req_header;
std::string _blank_line;
std::string _body;
//反序列化的过程中,细化我们解析的字段
std::string _method;
std::string _uri;
std::string _version;
};
class HttpResponse
{
private:
std::string _resp_line;
std::vector<std::string> _resp_header;
std::string _blank_line;
std::string _body;
};



1.Deserialize函数的实现
void Deserialize(std::string& request_str)
{
if(ParseOneLine(request_str,&_req_line,Sep))
{
//提取请求行内的详细字段
ParseReqLine(_req_line,LineSep);
ParseHeader(request_str);
_body = request_str;
}
}

a.ParseOneLine(请求行的拆分)
//1.正常字符串
//2.true && 空
//3.false && 空
bool ParseOneLine(std::string& str,std::string* out,const std::string& sep)
{
auto pos =

最低0.47元/天 解锁文章
9398

被折叠的 条评论
为什么被折叠?



