void HTMLForm::load(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler) { if (request.getMethod() == HTTPRequest::HTTP_POST) { std::string mediaType; NameValueCollection params; MessageHeader::splitParameters(request.getContentType(), mediaType, params); _encoding = mediaType; if (_encoding == ENCODING_MULTIPART) { _boundary = params["boundary"]; readMultipart(requestBody, handler); } else { readUrl(requestBody); } } else { URI uri(request.getURI()); std::istringstream istr(uri.getRawQuery()); readUrl(istr); } }
CGIParser::CGIParser(const HTTPRequest& request, bool queryOnly) { parse(request.getQueryString()); if (!queryOnly && !strcmp(request.getMethod(),"POST")) { if (request.getContentType().find("application/x-www-form-urlencoded") != string::npos) parse(request.getRequestBody()); } }
void HTTPRequestTest::testRead4() { std::string s("POST /test.cgi HTTP/1.1\r\nConnection: Close\r\nContent-Length: 100 \r\nContent-Type: text/plain\r\nHost: localhost:8000\r\nUser-Agent: Poco\r\n\r\n"); std::istringstream istr(s); HTTPRequest request; request.read(istr); assert (request.getMethod() == HTTPRequest::HTTP_POST); assert (request.getURI() == "/test.cgi"); assert (request.getVersion() == HTTPMessage::HTTP_1_1); assert (request.size() == 5); assert (request["Connection"] == "Close"); assert (request["Host"] == "localhost:8000"); assert (request["User-Agent"] == "Poco"); assert (request.getContentType() == "text/plain"); assert (request.getContentLength() == 100); assert (istr.get() == -1); }