1. HTTP请求/响应报文封装测试
测试请求/响应类对报文封装的正确性。
- 请求报文:
请求方法默认为GET, 也可以调用setMethod(HttpMethod::POST)来进行指定。
设置一个请求首部字段Host:xxxx,这里封装一个百度网址。
设置一个报文主体,可以是任意内容,这里设置为字符串"hello baidu"。
最终调用dump将破碎的成员组合成一个完整报文。
- 响应报文:
响应状态码默认为200 OK, 也可以调用setStatus(HttpStatus::MOVED_PERMANENTLY)
设置一个响应首部字段X-X:kit
设置连接状态connection: keep-alive
设置报文主体,为字符串"hello kit"
最终调用dump将破碎的成员组合成一个完整报文。
static Logger::ptr g_logger = KIT_LOG_ROOT();/*封装请求报文*/void test_request(){http::HttpRequest::ptr req(new http::HttpRequest);//req->setMethod(http::HttpMethod::POST);req->setHeader("host", "www.baidu.com");req->setBody("hello baidu");req->dump(std::cout) << std::endl;}/*封装响应报文*/void test_response(){http::HttpResponse::ptr rsp(new http::HttpResponse);// rsp->setStatus(http::HttpStatus::MOVED_PERMANENTLY);rsp->setHeader("X-X", "kit");rsp->setBody("hello kit");rsp->setClose(false);rsp->dump(std::cout) << std::endl;}int main(){KIT_LOG_INFO(g_logger) << "test begin";test_request();test_response();KIT_LOG_INFO(g_logger) << "test end";return 0;}


2. HTTP请求/响应报文解析测试
目的:通过telnet工具,请求www.baidu.com,将百度的响应报文内容拿出来手动置为一个数组,让其去解析该数组内容。
test_http_parser.cpp: ```cpp static Logger::ptr g_logger = KIT_LOG_ROOT();
char test_request_data[] = “POST / HTTP/1.1\r\n” “host: www.baidu.com\r\n” “content-leng”;
void test_request() { http::HttpRequestParser parser; std::string temp = test_request_data; size_t ret = parser.execute(&temp[0], temp.size());
KIT_LOG_INFO(g_logger) << "execute ret = " << ret<< ",has error=" << parser.hasError()<< ",is finished=" << parser.isFinished()<< ", total len=" << temp.size()<< ", content length=" << parser.getContentLength();temp.resize(temp.size() - ret);KIT_LOG_INFO(g_logger) << "data=\n" << parser.getData()->toString();KIT_LOG_INFO(g_logger) << "re temp=" << temp;
}
char test_response_data[] = “HTTP/1.0 200 OK\r\n” “Accept-Ranges: bytes\r\n” “Cache-Control: no-cache\r\n” “Content-Length: 9508\r\n” “Content-Type: text/html\r\n” “Date: Fri, 21 Jan 2022 09:10:09 GMT\r\n” “P3p: CP=\” OTI DSP COR IVA OUR IND COM \”\r\n” “P3p: CP=\” OTI DSP COR IVA OUR IND COM \”\r\n” “Pragma: no-cache\r\n” “Server: BWS/1.1\r\n” “Set-Cookie: BAIDUID=724BAEA1537982702513F8E2FB225C4A:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\n” “Set-Cookie: BIDUPSID=724BAEA1537982702513F8E2FB225C4A; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\n” “Set-Cookie: PSTM=1642758641; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\n” “Set-Cookie: BAIDUID=724BAEA153798270D2ABD4B41739368C:FG=1; max-age=31536000; expires=Sat, 21-Jan-23 09:50:41 GMT; domain=.baidu.com; path=/; version=1; comment=bd\r\n” “Traceid: 164275864109089502828095481575910497583\r\n” “Vary: Accept-Encoding\r\n” “X-Frame-Options: sameorigin\r\n” “X-Ua-Compatible: IE=Edge,chrome=1\r\n”;
void test_response() { http::HttpResponseParser parser; std::string temp = test_response_data; size_t ret = parser.execute(test_response_data, temp.size(), false);
KIT_LOG_INFO(g_logger) << "execute ret = " << ret<< ",has error=" << parser.hasError()<< ",is finished=" << parser.isFinished()<< ",total len=" << temp.size()<< ",content length=" << parser.getContentLength();temp.resize(temp.size() - ret);KIT_LOG_INFO(g_logger) << "data=\n" << parser.getData()->toString();KIT_LOG_INFO(g_logger) << "re temp=" << temp;
}
int main() { KIT_LOG_INFO(g_logger) << “test begin”;
test_request();std::cout << "---------------\n";test_response();KIT_LOG_INFO(g_logger) << "test end";return 0;
}
```

