void HTTPProxyConnection::ExtractRequest(request& r) { std::string requestString = m_Buffer; int idx=requestString.find(" "); std::string method = requestString.substr(0,idx); requestString = requestString.substr(idx+1); idx=requestString.find(" "); std::string requestUrl = requestString.substr(0,idx); LogPrint("method is: ", method, "\nRequest is: ", requestUrl); std::string server=""; std::string port="80"; boost::regex rHTTP("http://(.*?)(:(\\d+))?(/.*)"); boost::smatch m; std::string path; if(boost::regex_search(requestUrl, m, rHTTP, boost::match_extra)) { server=m[1].str(); if(m[2].str() != "") { port=m[3].str(); } path=m[4].str(); } LogPrint("server is: ",server, " port is: ", port, "\n path is: ",path); r.uri = path; r.method = method; r.host = server; r.port = boost::lexical_cast<int>(port); }
void connection::start_connect() { std::string server=""; std::string port="80"; boost::regex rHTTP("http://(.*?)(:(\\d+))?(/.*)"); boost::smatch m; if(boost::regex_search(fURL, m, rHTTP, boost::match_extra)) { server=m[1].str(); if(m[2].str() != "") { port=m[3].str(); } fNewURL=m[4].str(); } if(server.empty()) { std::cout << "Can't parse URL "<< std::endl; return; } if(!isOpened || server != fServer || port != fPort) { fServer=server; fPort=port; ba::ip::tcp::resolver::query query(server, port); resolver_.async_resolve(query, boost::bind(&connection::handle_resolve, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::iterator)); } else { start_write_to_server(); } }
void HTTPProxyHandler::ExtractRequest() { LogPrint(eLogDebug,"--- HTTP Proxy method is: ", m_method, "\nRequest is: ", m_url); std::string server=""; std::string port="80"; boost::regex rHTTP("http://(.*?)(:(\\d+))?(/.*)"); boost::smatch m; std::string path; if(boost::regex_search(m_url, m, rHTTP, boost::match_extra)) { server=m[1].str(); if (m[2].str() != "") port=m[3].str(); path=m[4].str(); } LogPrint(eLogDebug,"--- HTTP Proxy server is: ",server, " port is: ", port, "\n path is: ",path); m_address = server; m_port = boost::lexical_cast<int>(port); m_path = path; }