diff options
Diffstat (limited to 'icespider/fcgi/cgiRequestBase.cpp')
-rw-r--r-- | icespider/fcgi/cgiRequestBase.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/icespider/fcgi/cgiRequestBase.cpp b/icespider/fcgi/cgiRequestBase.cpp index 97a71fc..ec9836b 100644 --- a/icespider/fcgi/cgiRequestBase.cpp +++ b/icespider/fcgi/cgiRequestBase.cpp @@ -1,6 +1,7 @@ #include "cgiRequestBase.h" #include <boost/algorithm/string/case_conv.hpp> #include <boost/algorithm/string/split.hpp> +#include <boost/algorithm/string/classification.hpp> #include <util.h> namespace ba = boost::algorithm; @@ -26,6 +27,15 @@ namespace IceSpider { void CgiRequestBase::initialize() { + namespace ba = boost::algorithm; + auto path = (optionalLookup("REDIRECT_URL", envmap) / + [this]() { return optionalLookup("SCRIPT_NAME", envmap); } / + [this]() -> std::string { throw std::runtime_error("Couldn't determine request path"); }) + .substr(1); + if (!path.empty()) { + ba::split(pathmap, path, ba::is_any_of("/"), ba::token_compress_off); + } + auto qs = envmap.find("QUERY_STRING"); if (qs != envmap.end()) { auto start = std::get<0>(qs->second); @@ -58,12 +68,10 @@ namespace IceSpider { return std::string(std::get<0>(i->second), std::get<1>(i->second)); } - std::string + const std::vector<std::string> & CgiRequestBase::getRequestPath() const { - return optionalLookup("REDIRECT_URL", envmap) / - [this]() { return optionalLookup("SCRIPT_NAME", envmap); } / - [this]() -> std::string { throw std::runtime_error("Couldn't determine request path"); }; + return pathmap; } UserIceSpider::HttpMethod @@ -73,12 +81,6 @@ namespace IceSpider { } IceUtil::Optional<std::string> - CgiRequestBase::getURLParam(const std::string & key) const - { - return optionalLookup(key, pathmap); - } - - IceUtil::Optional<std::string> CgiRequestBase::getQueryStringParam(const std::string & key) const { return optionalLookup(key, qsmap); |