#include <string>
#include <vector>
#include <iostream>
class HttpRequest {
public:
enum http_methods {GET, POST};
private:
http_methods method;
std::string URI, version;
std::vector<std::string> Methods;
int status;
HttpRequest();
public:
HttpRequest(http_methods, std::string,std::string);
HttpRequest(std::string);
void print() const;
};
HttpRequest::HttpRequest(http_methods method, std::string URI, std::string version):
method(method),
URI(URI),
version(version),
Methods{"GET", "POST"},
status(0)
{}
HttpRequest::HttpRequest(){}
HttpRequest::HttpRequest(std::string raw)
{
//First space
std::size_t pos = raw.find(" ");
if(pos == std::string::npos)
{
status = 1;
return;
}
//Method
std::string str_method = raw.substr(0, pos);
std::cout<<raw<<" "<<str_method<<std::endl;
if(str_method == "GET")
this->method = GET;
else if(str_method == "POST")
this->method = POST;
else
{
status = 2;
return;
}
//Second space
std::size_t pos2 = raw.find(" ",pos+1);
if(pos == std::string::npos)
{
status = 3;
return;
}
URI = raw.substr(pos+1, pos2-pos);
version = raw.substr(pos2+1);
}
void HttpRequest::print() const
{
std::cout<<"Status:\t\t"<<status<<'\n';
std::cout<<"Method:\t\t"<<(method)<<'\n';
std::cout<<"URI:\t\t"<<URI<<'\n';
std::cout<<"Version:\t"<<version<<std::endl;
}
int main()
{
HttpRequest req("POST / HTTP/1.1");
req.print();
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKCmNsYXNzIEh0dHBSZXF1ZXN0IHsKcHVibGljOgoJZW51bSBodHRwX21ldGhvZHMge0dFVCwgUE9TVH07CQoKcHJpdmF0ZToKCWh0dHBfbWV0aG9kcyBtZXRob2Q7CglzdGQ6OnN0cmluZyBVUkksIHZlcnNpb247CglzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTWV0aG9kczsKCWludCBzdGF0dXM7CglIdHRwUmVxdWVzdCgpOwpwdWJsaWM6CglIdHRwUmVxdWVzdChodHRwX21ldGhvZHMsIHN0ZDo6c3RyaW5nLHN0ZDo6c3RyaW5nKTsKCUh0dHBSZXF1ZXN0KHN0ZDo6c3RyaW5nKTsKCgl2b2lkIHByaW50KCkgY29uc3Q7Cn07CgoKCkh0dHBSZXF1ZXN0OjpIdHRwUmVxdWVzdChodHRwX21ldGhvZHMgbWV0aG9kLCBzdGQ6OnN0cmluZyBVUkksIHN0ZDo6c3RyaW5nIHZlcnNpb24pOgoJbWV0aG9kKG1ldGhvZCksIAoJVVJJKFVSSSksIAoJdmVyc2lvbih2ZXJzaW9uKSwgCglNZXRob2RzeyJHRVQiLCAiUE9TVCJ9LAoJc3RhdHVzKDApIAp7fQoKCkh0dHBSZXF1ZXN0OjpIdHRwUmVxdWVzdCgpe30KCkh0dHBSZXF1ZXN0OjpIdHRwUmVxdWVzdChzdGQ6OnN0cmluZyByYXcpCnsKCS8vRmlyc3Qgc3BhY2UKCXN0ZDo6c2l6ZV90IHBvcyA9IHJhdy5maW5kKCIgIik7CglpZihwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCgl7CgkJc3RhdHVzID0gMTsKCQlyZXR1cm47Cgl9CgkKCS8vTWV0aG9kCglzdGQ6OnN0cmluZyBzdHJfbWV0aG9kID0gcmF3LnN1YnN0cigwLCBwb3MpOwoJc3RkOjpjb3V0PDxyYXc8PCIgIjw8c3RyX21ldGhvZDw8c3RkOjplbmRsOwoJaWYoc3RyX21ldGhvZCA9PSAiR0VUIikKCQl0aGlzLT5tZXRob2QgPSBHRVQ7CgllbHNlIGlmKHN0cl9tZXRob2QgPT0gIlBPU1QiKQoJCXRoaXMtPm1ldGhvZCA9IFBPU1Q7CgllbHNlIAoJewoJCXN0YXR1cyA9IDI7CgkJcmV0dXJuOwoJfSAKCgkvL1NlY29uZCBzcGFjZQoJc3RkOjpzaXplX3QgcG9zMiA9IHJhdy5maW5kKCIgIixwb3MrMSk7CglpZihwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCgl7CgkJc3RhdHVzID0gMzsKCQlyZXR1cm47Cgl9CglVUkkgPSByYXcuc3Vic3RyKHBvcysxLCBwb3MyLXBvcyk7Cgl2ZXJzaW9uID0gcmF3LnN1YnN0cihwb3MyKzEpOwp9Cgp2b2lkIEh0dHBSZXF1ZXN0OjpwcmludCgpIGNvbnN0CnsKCXN0ZDo6Y291dDw8IlN0YXR1czpcdFx0Ijw8c3RhdHVzPDwnXG4nOwoJc3RkOjpjb3V0PDwiTWV0aG9kOlx0XHQiPDwobWV0aG9kKTw8J1xuJzsKCXN0ZDo6Y291dDw8IlVSSTpcdFx0Ijw8VVJJPDwnXG4nOwoJc3RkOjpjb3V0PDwiVmVyc2lvbjpcdCI8PHZlcnNpb248PHN0ZDo6ZW5kbDsKfQoKCmludCBtYWluKCkKewoKCUh0dHBSZXF1ZXN0IHJlcSgiUE9TVCAvIEhUVFAvMS4xIik7CglyZXEucHJpbnQoKTsKCXJldHVybiAwOwp9Cgo=