mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 14:29:10 -07:00
Make 'chunked' in Transfer-Encoding case-insensitive
This commit is contained in:
parent
c6a6530716
commit
ca3613cd21
2 changed files with 36 additions and 1 deletions
|
@ -34,6 +34,10 @@
|
|||
#undef min
|
||||
#undef max
|
||||
|
||||
#ifndef strcasecmp
|
||||
#define strcasecmp _stricmp
|
||||
#endif
|
||||
|
||||
typedef SOCKET socket_t;
|
||||
#else
|
||||
#include <pthread.h>
|
||||
|
@ -860,7 +864,7 @@ bool read_content(Stream& strm, T& x, Progress progress = Progress())
|
|||
} else {
|
||||
const auto& encoding = get_header_value(x.headers, "Transfer-Encoding", "");
|
||||
|
||||
if (!strcmp(encoding, "chunked")) {
|
||||
if (!strcasecmp(encoding, "chunked")) {
|
||||
return read_content_chunked(strm, x);
|
||||
} else {
|
||||
return read_content_without_length(strm, x);
|
||||
|
|
31
test/test.cc
31
test/test.cc
|
@ -292,6 +292,9 @@ protected:
|
|||
res.status = 404;
|
||||
}
|
||||
})
|
||||
.post("/chunked", [&](const Request& req, Response& /*res*/) {
|
||||
EXPECT_EQ(req.body, "dechunked post body");
|
||||
})
|
||||
.post("/multipart", [&](const Request& req, Response& /*res*/) {
|
||||
EXPECT_EQ(5u, req.files.size());
|
||||
ASSERT_TRUE(!req.has_file("???"));
|
||||
|
@ -660,6 +663,34 @@ TEST_F(ServerTest, CaseInsensitiveHeaderName)
|
|||
EXPECT_EQ("Hello World!", res->body);
|
||||
}
|
||||
|
||||
TEST_F(ServerTest, CaseInsensitiveTransferEncoding)
|
||||
{
|
||||
Request req;
|
||||
req.method = "POST";
|
||||
req.path = "/chunked";
|
||||
|
||||
std::string host_and_port;
|
||||
host_and_port += HOST;
|
||||
host_and_port += ":";
|
||||
host_and_port += std::to_string(PORT);
|
||||
|
||||
req.headers.emplace("Host", host_and_port.c_str());
|
||||
req.headers.emplace("Accept", "*/*");
|
||||
req.headers.emplace("User-Agent", "cpp-httplib/0.1");
|
||||
req.headers.emplace("Content-Type", "text/plain");
|
||||
req.headers.emplace("Content-Length", "0");
|
||||
req.headers.emplace("Transfer-Encoding", "Chunked"); // Note, "Chunked" rather than typical "chunked".
|
||||
|
||||
// Client does not chunk, so make a chunked body manually.
|
||||
req.body = "4\r\ndech\r\nf\r\nunked post body\r\n0\r\n\r\n";
|
||||
|
||||
auto res = std::make_shared<Response>();
|
||||
auto ret = cli_.send(req, *res);
|
||||
|
||||
ASSERT_TRUE(ret);
|
||||
EXPECT_EQ(200, res->status);
|
||||
}
|
||||
|
||||
TEST_F(ServerTest, GetMethodRemoteAddr)
|
||||
{
|
||||
auto res = cli_.get("/remote_addr");
|
||||
|
|
Loading…
Reference in a new issue