1 #include <msp/strings/format.h>
2 #include <msp/strings/regex.h>
3 #include <msp/strings/utils.h>
12 Request::Request(const string &m, const string &p):
16 if(path.find(' ')!=string::npos)
17 throw invalid_argument("Request::Request");
20 string Request::str() const
22 string result = format("%s %s %s\r\n", method, path, version_str(http_version));
23 result += str_common();
28 Request Request::parse(const string &str)
30 string::size_type lf = str.find('\n');
31 vector<string> parts = split(str.substr(0, lf-(str[lf-1]=='\r')), ' ', 2);
33 throw invalid_argument("Request::parse");
35 Request result(parts[0], parts[1]);
36 result.http_version = parse_version(parts[2]);
38 lf += result.parse_headers(str.substr(lf+1));
40 result.parse_content(str.substr(lf+1));
45 Request Request::from_url(const string &str)
47 Url url = parse_url(str);
48 if(url.scheme!="http")
49 throw invalid_argument("Request::from_url");
51 string path = urlencode(url.path);
54 if(!url.query.empty())
60 Request result("GET", path);
61 result.set_header("Host", url.host);
62 result.set_header("Connection", "close");