Loading src/http.cpp +23 −5 Original line number Diff line number Diff line Loading @@ -374,6 +374,11 @@ const std::vector<char> libhttppp::HttpClient::_h2Request( } } // Add content-length for POST body (servers may rely on it) if (postBody && !postBody->empty()) { extra.push_back({"content-length", std::to_string(postBody->size()), false}); } std::string hpack_block = hpack::Encoder::encodeRequestHeaders( method, path, scheme, auth.str(), extra); Loading Loading @@ -825,9 +830,14 @@ const std::vector<char> libhttppp::HttpClient::Post(libhttppp::HttpRequest &nreq nreq.setHeaderData("host")->push_back(host.str()); nreq.setRequestType(POSTREQUEST); if (nreq.getRequestURL().empty()) nreq.setRequestURL("/"); nreq.setRequestURL(_url.getPath()); if (nreq.getRequestVersion().empty()) nreq.setRequestVersion(HTTPVERSION(1.1)); // Debug logging std::cerr << "[HttpClient::Post] URL path: '" << nreq.getRequestURL() << "' | POST body size: " << post.size() << std::endl; // IMPORTANT: length as string nreq.setHeaderData("content-length")->push_back(std::to_string(post.size())); // (optionally) set content-type: Loading Loading @@ -1076,6 +1086,15 @@ const std::vector<char> libhttppp::HttpClient::Post(libhttppp::HttpRequest &nreq ret.insert(ret.end(), buf.data.buf, buf.data.buf + n); } } // Debug: log response std::cerr << "[HttpClient::Post] Response size: " << ret.size() << " bytes" << std::endl; if (ret.size() < 200) { std::cerr << "[HttpClient::Post] Response body: " << std::string(ret.begin(), ret.end()) << std::endl; } else { std::cerr << "[HttpClient::Post] Response first 200 bytes: " << std::string(ret.begin(), ret.begin() + 200) << std::endl; } } catch (netplus::NetException &e) { libhttppp::HTTPException ee; ee[libhttppp::HTTPException::Error] << e.what(); Loading Loading @@ -2270,7 +2289,7 @@ void libhttppp::HttpRequest::printHeader(std::string &buffer){ else if(_RequestType==POSTREQUEST) buffer="POST "; buffer.append(_cachedRequestURL); buffer.append(_cachedRequest); buffer.append(" "); buffer.append(_cachedRequestVersion); buffer.append("\r\n"); Loading Loading @@ -2372,7 +2391,6 @@ void libhttppp::HttpRequest::send(const HttpUrl &dest, std::string header; printHeader(header); std::string full = header + _cachedRequest; size_t off = 0; if(!sock || sock->fd()<0){ Loading @@ -2386,7 +2404,7 @@ void libhttppp::HttpRequest::send(const HttpUrl &dest, } sock->connect(dest.getHost(),dest.getPort(),true); } netplus::buffer buf(full.c_str(),full.length()); netplus::buffer buf(header.c_str(),header.length()); sock->sendData(buf,0); } Loading src/httpd.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,12 @@ void libhttppp::HttpEvent::_dispatchH2Stream(HttpRequest &cureq, tempreq.RecvData.append(reqBody.data(), reqBody.size()); } // Ensure content-length is set from actual body size (H2 framing // provides the length, but application code may rely on the header) if (!reqBody.empty() && !tempreq.getHeaderData("content-length")) { tempreq.setHeaderData("content-length")->push_back(std::to_string(reqBody.size())); } // Dispatch to user's virtual RequestEvent RequestEvent(tempreq, tid, args); Loading Loading
src/http.cpp +23 −5 Original line number Diff line number Diff line Loading @@ -374,6 +374,11 @@ const std::vector<char> libhttppp::HttpClient::_h2Request( } } // Add content-length for POST body (servers may rely on it) if (postBody && !postBody->empty()) { extra.push_back({"content-length", std::to_string(postBody->size()), false}); } std::string hpack_block = hpack::Encoder::encodeRequestHeaders( method, path, scheme, auth.str(), extra); Loading Loading @@ -825,9 +830,14 @@ const std::vector<char> libhttppp::HttpClient::Post(libhttppp::HttpRequest &nreq nreq.setHeaderData("host")->push_back(host.str()); nreq.setRequestType(POSTREQUEST); if (nreq.getRequestURL().empty()) nreq.setRequestURL("/"); nreq.setRequestURL(_url.getPath()); if (nreq.getRequestVersion().empty()) nreq.setRequestVersion(HTTPVERSION(1.1)); // Debug logging std::cerr << "[HttpClient::Post] URL path: '" << nreq.getRequestURL() << "' | POST body size: " << post.size() << std::endl; // IMPORTANT: length as string nreq.setHeaderData("content-length")->push_back(std::to_string(post.size())); // (optionally) set content-type: Loading Loading @@ -1076,6 +1086,15 @@ const std::vector<char> libhttppp::HttpClient::Post(libhttppp::HttpRequest &nreq ret.insert(ret.end(), buf.data.buf, buf.data.buf + n); } } // Debug: log response std::cerr << "[HttpClient::Post] Response size: " << ret.size() << " bytes" << std::endl; if (ret.size() < 200) { std::cerr << "[HttpClient::Post] Response body: " << std::string(ret.begin(), ret.end()) << std::endl; } else { std::cerr << "[HttpClient::Post] Response first 200 bytes: " << std::string(ret.begin(), ret.begin() + 200) << std::endl; } } catch (netplus::NetException &e) { libhttppp::HTTPException ee; ee[libhttppp::HTTPException::Error] << e.what(); Loading Loading @@ -2270,7 +2289,7 @@ void libhttppp::HttpRequest::printHeader(std::string &buffer){ else if(_RequestType==POSTREQUEST) buffer="POST "; buffer.append(_cachedRequestURL); buffer.append(_cachedRequest); buffer.append(" "); buffer.append(_cachedRequestVersion); buffer.append("\r\n"); Loading Loading @@ -2372,7 +2391,6 @@ void libhttppp::HttpRequest::send(const HttpUrl &dest, std::string header; printHeader(header); std::string full = header + _cachedRequest; size_t off = 0; if(!sock || sock->fd()<0){ Loading @@ -2386,7 +2404,7 @@ void libhttppp::HttpRequest::send(const HttpUrl &dest, } sock->connect(dest.getHost(),dest.getPort(),true); } netplus::buffer buf(full.c_str(),full.length()); netplus::buffer buf(header.c_str(),header.length()); sock->sendData(buf,0); } Loading
src/httpd.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,12 @@ void libhttppp::HttpEvent::_dispatchH2Stream(HttpRequest &cureq, tempreq.RecvData.append(reqBody.data(), reqBody.size()); } // Ensure content-length is set from actual body size (H2 framing // provides the length, but application code may rely on the header) if (!reqBody.empty() && !tempreq.getHeaderData("content-length")) { tempreq.setHeaderData("content-length")->push_back(std::to_string(reqBody.size())); } // Dispatch to user's virtual RequestEvent RequestEvent(tempreq, tid, args); Loading