• Source
    1. #include <string>
    2. #include <vector>
    3. #include <iostream>
    4.  
    5.  
    6. class HttpRequest {
    7. public:
    8. enum http_methods {GET, POST};
    9.  
    10. private:
    11. http_methods method;
    12. std::string URI, version;
    13. std::vector<std::string> Methods;
    14. int status;
    15. HttpRequest();
    16. public:
    17. HttpRequest(http_methods, std::string,std::string);
    18. HttpRequest(std::string);
    19.  
    20. void print() const;
    21. };
    22.  
    23.  
    24.  
    25. HttpRequest::HttpRequest(http_methods method, std::string URI, std::string version):
    26. method(method),
    27. URI(URI),
    28. version(version),
    29. Methods{"GET", "POST"},
    30. status(0)
    31. {}
    32.  
    33.  
    34. HttpRequest::HttpRequest(){}
    35.  
    36. HttpRequest::HttpRequest(std::string raw)
    37. {
    38. //First space
    39. std::size_t pos = raw.find(" ");
    40. if(pos == std::string::npos)
    41. {
    42. status = 1;
    43. return;
    44. }
    45.  
    46. //Method
    47. std::string str_method = raw.substr(0, pos);
    48. std::cout<<raw<<" "<<str_method<<std::endl;
    49. if(str_method == "GET")
    50. this->method = GET;
    51. else if(str_method == "POST")
    52. this->method = POST;
    53. else
    54. {
    55. status = 2;
    56. return;
    57. }
    58.  
    59. //Second space
    60. std::size_t pos2 = raw.find(" ",pos+1);
    61. if(pos == std::string::npos)
    62. {
    63. status = 3;
    64. return;
    65. }
    66. URI = raw.substr(pos+1, pos2-pos);
    67. version = raw.substr(pos2+1);
    68. }
    69.  
    70. void HttpRequest::print() const
    71. {
    72. std::cout<<"Status:\t\t"<<status<<'\n';
    73. std::cout<<"Method:\t\t"<<(method)<<'\n';
    74. std::cout<<"URI:\t\t"<<URI<<'\n';
    75. std::cout<<"Version:\t"<<version<<std::endl;
    76. }
    77.  
    78.  
    79. int main()
    80. {
    81.  
    82. HttpRequest req("POST / HTTP/1.1");
    83. req.print();
    84. return 0;
    85. }
    86.  
    87.