X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frequest.cpp;h=bcf36c991f727f5c539a6431304d68691dd5be92;hb=b06cf07513fdd85e249398ebfce500fbf3dfb6a7;hp=e63dc66f7487e08803380a6f82755528733c52ab;hpb=070d56e7b0036ca2e4234eb06dcae83ebfb3df34;p=libs%2Fnet.git diff --git a/source/request.cpp b/source/request.cpp index e63dc66..bcf36c9 100644 --- a/source/request.cpp +++ b/source/request.cpp @@ -28,21 +28,35 @@ string Request::str() const return result; } +Request Request::parse(const string &str) +{ + unsigned lf=str.find('\n'); + vector parts=split(str.substr(0, lf-(str[lf-1]=='\r')), ' ', 2); + if(parts.size()<3) + throw InvalidParameterValue("Invalid request"); + + Request result(parts[0], parts[1]); + result.http_version=parse_version(parts[2]); + + lf+=result.parse_headers(str.substr(lf+1)); + + result.parse_content(str.substr(lf+1)); + + return result; +} + Request Request::from_url(const string &url) { - if(RegMatch match=Regex("^http://([a-zA-Z0-9.-]+)(:([0-9]+))?(/[^ #]*)?$").match(url)) + if(RegMatch match=Regex("^http://([a-zA-Z0-9.-]+(:[0-9]+)?)(/[^ #]*)?$").match(url)) { string host=match[1].str; - string port="80"; - if(match[3]) - port=match[3].str; - string path=match[4].str; + string path=match[3].str; if(path.empty()) path="/"; Request result("GET", path); - result.set_header("host", host); - result.set_header("x-port", port); + result.set_header("Host", host); + result.set_header("Connection", "close"); return result; }