12 size_t header_start = resp.find(LINE_END);
13 size_t data_start = resp.find(LINE_END + LINE_END);
14 size_t header_end = data_start - header_start;
15 std::string status_substr = resp.substr(0, header_start);
16 ExtractText(&status_substr);
17 DecodeStatus(status_substr);
19 std::string headers_substr = resp.substr(header_start, header_end);
20 ExtractText(&headers_substr);
21 DecodeHeaders(headers_substr);
23 data = resp.substr(data_start);
37void HttpClient::DecodeStatus(std::string status_str) {
38 std::stringstream status_stream(status_str);
39 status_stream >> version >> code;
42void HttpClient::DecodeHeaders(std::string headers_str) {
43 std::istringstream header_stream(headers_str);
45 for (std::string line; std::getline(header_stream, line,
'\n');) {
46 std::size_t pos = line.find(
':');
47 std::string key = line.substr(0, pos);
49 std::string val = line.substr(pos + 1);
55void HttpClient::RemoveLeadingSpace(std::string* str) {
57 auto end = std::find_if(str->begin(), str->end(),
58 [](
char c) { return !isSpace(c); });
60 if (str->begin() != end) {
63 std::remove_if(str->begin(), end, [](
char c) { return isSpace(c); }),
68void HttpClient::RemoveTrailingSpace(std::string* str) {
70 std::reverse(str->begin(), str->end());
73 auto rend = std::find_if(str->begin(), str->end(),
74 [](
char c) { return !isSpace(c); });
77 if (str->begin() != rend) {
80 std::remove_if(str->begin(), rend, [](
char c) { return isSpace(c); }),
85 std::reverse(str->begin(), str->end());
88void HttpClient::ExtractText(std::string* str) {
89 RemoveLeadingSpace(str);
90 RemoveTrailingSpace(str);
93void HttpClient::RemoveSpace(std::string* str) {
95 str->erase(std::remove_if(str->begin(), str->end(),
96 [](
char c) { return isSpace(c); }),
HttpClient()
Default constructor.
~HttpClient()
Default destructor.
std::string Version()
Get the Http version.
unsigned int ResponseCode()
Get the http response code.
std::string Header(std::string header)
Get value of header.
std::string Data()
Get data from Http request.