在玩具项目中,我正在实施HTTP解析器。我没有使用C ++的经验。我可以跳到下一个CR,但我想跳过所有标题,这样我的分隔符就是一个由CR LF CR LF(或"\r\n\r\n"
)组成的字符串。
我现在的代码是:
// Implements a *very* basic HTTP parser
// This parser will choke on valid HTTP Request-Line (GET / HTTP/1.0)
std::tuple<std::string, std::string> HttpParser::parse(std::istream& stream)
{
char buffer[2048];
// Extract the METHOD from the HTTP Request-Line
stream.getline(buffer, sizeof(buffer) - 1, ' ');
std::string method(buffer);
// Extract URI from HTTP Request-Line
stream.getline(buffer, sizeof(buffer) - 1, ' ');
std::string uri(buffer);
// Skip over rest of headers...
stream.ignore();
return std::tuple<std::string, std::string>{method, uri};
}
我找到How to split string using istringstream with other delimiter than whitespace?,但答案使用了一个库,我现在更愿意使用它。我还找到了Reading formatted data with C++'s stream operator >> when data has spaces,但这个答案也会分成单个字符。
此外,find_first_of在第一次出现时停止,而不是完整的分隔符。
我知道我想使用与std::istream::ignore()
类似的内容,但ignore()
仅接受char
作为分隔符。是否有类似的功能可以跳过,直到找到特定的字符串?也许像index_of?