Skip to content

Commit 4e3abe8

Browse files
committed
Implemented get("plain") returning BODY. Closes #2.
1 parent 32cdeab commit 4e3abe8

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

src/ESPWebServer.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,29 @@ String ESPWebServer::pathArg(unsigned int i) {
141141
}
142142

143143
String ESPWebServer::arg(String name) {
144+
// Special case: arg("plain") returns the body of non-multipart requests.
145+
if (name == "plain") {
146+
bool isForm = false;
147+
HTTPHeaders* headers = _activeRequest->getHTTPHeaders();
148+
HTTPHeader* ctHeader = headers->get("Content-Type");
149+
if (ctHeader && ctHeader->_value.substr(0, 10) == "multipart/") {
150+
isForm = true;
151+
}
152+
if (!isForm) {
153+
size_t bodyLength = _activeRequest->getContentLength();
154+
String rv;
155+
rv.reserve(bodyLength);
156+
char buffer[257];
157+
while(!_activeRequest->requestComplete()) {
158+
size_t readLength = _activeRequest->readBytes((byte*)buffer, 256);
159+
if (readLength <= 0) break;
160+
buffer[readLength] = 0;
161+
rv += buffer;
162+
}
163+
HTTPS_LOGD("arg(\"plain\") returns %d bytes", rv.length());
164+
return rv;
165+
}
166+
}
144167
ResourceParameters *params = _activeRequest->getParams();
145168
std::string value;
146169
params->getQueryParameter(std::string(name.c_str()), value);

0 commit comments

Comments
 (0)