16 std::vector<std::string> lines;
17 std::istringstream stream(headers);
20 while (std::getline(stream, line,
'\n')) {
21 lines.push_back(line);
25 for (
auto& line : lines) {
26 if (line.substr(0, 5) ==
"HTTP/") {
30 if (line.length() > 0) {
31 auto found = line.find(
":");
32 if (found != std::string::npos) {
33 auto value = line.substr(found + 1);
34 value.erase(0,
value.find_first_not_of(
"\t "));
35 value.resize(std::min(
value.size(),
value.find_last_not_of(
"\t\n\r ") + 1));
36 header[line.substr(0, found)] =
value;
45 std::vector<std::string> tokens;
47 std::stringstream stream(to_split);
49 while (std::getline(stream, item, delimiter)) {
50 tokens.push_back(item);
57 data->append(static_cast<char*>(ptr), size * nmemb);
62 std::ostringstream escaped;
66 for (
auto i = value.cbegin(), n = value.cend();
i != n; ++
i) {
67 std::string::value_type c = (*i);
69 if (std::isalnum(c) || c ==
'-' || c ==
'_' || c ==
'.' || c ==
'~') {
74 escaped << '%' << std::setw(2) << std::int32_t(static_cast<unsigned char>(c));
std::vector< std::string > split(const std::string &to_split, char delimiter)
UNITTEST_START char * ptr
std::string urlEncode(const std::string &value)
UNITTEST_START int * value
size_t writeFunction(void *ptr, size_t size, size_t nmemb, std::string *data)
Header parseHeader(const std::string &headers)