summaryrefslogtreecommitdiff
path: root/http.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'http.cpp')
-rw-r--r--http.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/http.cpp b/http.cpp
index 46f8e40..d7b1dc9 100644
--- a/http.cpp
+++ b/http.cpp
@@ -7,7 +7,7 @@
#include <vector>
HTTPRequest::HTTPRequest(std::istream& is) {
- std::string firstline;
+ std::string firstline, query_str;
std::getline(is, firstline);
std::vector<std::string> splitvec;
@@ -15,8 +15,26 @@ HTTPRequest::HTTPRequest(std::istream& is) {
type = splitvec[0];
path = splitvec[1];
- url_decode(path);
httpver = splitvec[2];
+
+ if(path.find("?") != std::string::npos) {
+ boost::algorithm::split(splitvec, path, boost::is_any_of("?"));
+ path = splitvec[0];
+ query_str = splitvec[1];
+ boost::algorithm::split(splitvec, query_str, boost::is_any_of("&"));
+ for(std::vector<std::string>::iterator it = splitvec.begin(); it != splitvec.end(); it++) {
+ std::vector<std::string> sv;
+ boost::algorithm::split(sv, *it, boost::is_any_of("="));
+ std::string key = sv[0];
+ std::string value = sv[1];
+ url_decode(key);
+ url_decode(value);
+ query[key] = value;
+ std::cout << boost::format("%s: %s") % key % value << std::endl;
+ }
+ }
+ url_decode(path);
+
std::cout << boost::format("%s %s %s\n") % type % path % httpver;
while(is.good()) {