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;
} ```