#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void parseHttpRequest(const std::string& httpRequest) {
std::istringstream stream(httpRequest);
std::string line;
// 解析请求行
std::getline(stream, line);
std::istringstream lineStream(line);
std::string method, uri, version;
lineStream >> method >> uri >> version;
std::cout << "Method: " << method << std::endl;
std::cout << "URI: " << uri << std::endl;
std::cout << "Version: " << version << std::endl;
//解析请求头
while (std::getline(stream, line) && line != "\r") { //这里会吃掉最后一个\r\n
size_t pos = line.find(": ");
if (pos != std::string::npos) {
std::string key = line.substr(0, pos);
std::string value = line.substr(pos + 2);
std::cout << key << ": " << value << std::endl;
}
}
// 解析请求体
std::string requestBody;
while (std::getline(stream, line)) {
requestBody += line;
}
std::cout << "Request Body: " << requestBody << std::endl;
}
int main() {
const char* httpRequest =
"GET /index.html HTTP/1.1\r\n"
"Host: www.example.com\r\n"
"User-Agent: curl/7.64.1\r\n"
"Accept: */*\r\n"
"\r\n"
"sdfsasdf";
parseHttpRequest(httpRequest);
return 0;
}
tips:getline会读取/r
istringstream >> line会忽略空字符