mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2025-05-12 06:01:40 +00:00
parent
1a7a7ed1c3
commit
da2f9e476e
16
httplib.h
16
httplib.h
@ -612,6 +612,7 @@ using Ranges = std::vector<Range>;
|
|||||||
struct Request {
|
struct Request {
|
||||||
std::string method;
|
std::string method;
|
||||||
std::string path;
|
std::string path;
|
||||||
|
Params params;
|
||||||
Headers headers;
|
Headers headers;
|
||||||
std::string body;
|
std::string body;
|
||||||
|
|
||||||
@ -623,7 +624,6 @@ struct Request {
|
|||||||
// for server
|
// for server
|
||||||
std::string version;
|
std::string version;
|
||||||
std::string target;
|
std::string target;
|
||||||
Params params;
|
|
||||||
MultipartFormDataMap files;
|
MultipartFormDataMap files;
|
||||||
Ranges ranges;
|
Ranges ranges;
|
||||||
Match matches;
|
Match matches;
|
||||||
@ -7420,7 +7420,7 @@ inline bool ClientImpl::send(Request &req, Response &res, Error &error) {
|
|||||||
inline bool ClientImpl::is_ssl_peer_could_be_closed(SSL *ssl) const {
|
inline bool ClientImpl::is_ssl_peer_could_be_closed(SSL *ssl) const {
|
||||||
char buf[1];
|
char buf[1];
|
||||||
return !SSL_peek(ssl, buf, 1) &&
|
return !SSL_peek(ssl, buf, 1) &&
|
||||||
SSL_get_error(ssl, 0) == SSL_ERROR_ZERO_RETURN;
|
SSL_get_error(ssl, 0) == SSL_ERROR_ZERO_RETURN;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -7438,9 +7438,7 @@ inline bool ClientImpl::send_(Request &req, Response &res, Error &error) {
|
|||||||
|
|
||||||
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
||||||
if (is_alive && is_ssl()) {
|
if (is_alive && is_ssl()) {
|
||||||
if (is_ssl_peer_could_be_closed(socket_.ssl)) {
|
if (is_ssl_peer_could_be_closed(socket_.ssl)) { is_alive = false; }
|
||||||
is_alive = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -7799,7 +7797,13 @@ inline bool ClientImpl::write_request(Stream &strm, Request &req,
|
|||||||
{
|
{
|
||||||
detail::BufferStream bstrm;
|
detail::BufferStream bstrm;
|
||||||
|
|
||||||
const auto &path = url_encode_ ? detail::encode_url(req.path) : req.path;
|
const auto &path_with_query =
|
||||||
|
req.params.empty() ? req.path
|
||||||
|
: append_query_params(req.path, req.params);
|
||||||
|
|
||||||
|
const auto &path =
|
||||||
|
url_encode_ ? detail::encode_url(path_with_query) : path_with_query;
|
||||||
|
|
||||||
detail::write_request_line(bstrm, req.method, path);
|
detail::write_request_line(bstrm, req.method, path);
|
||||||
|
|
||||||
header_writer_(bstrm, req.headers);
|
header_writer_(bstrm, req.headers);
|
||||||
|
34
test/test.cc
34
test/test.cc
@ -6542,6 +6542,40 @@ TEST(SendAPI, SimpleInterface_Online) {
|
|||||||
EXPECT_EQ(StatusCode::MovedPermanently_301, res->status);
|
EXPECT_EQ(StatusCode::MovedPermanently_301, res->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(SendAPI, WithParamsInRequest) {
|
||||||
|
Server svr;
|
||||||
|
|
||||||
|
svr.Get("/", [&](const Request &req, Response & /*res*/) {
|
||||||
|
EXPECT_TRUE(req.has_param("test"));
|
||||||
|
EXPECT_EQ("test_value", req.get_param_value("test"));
|
||||||
|
});
|
||||||
|
|
||||||
|
auto t = std::thread([&]() { svr.listen(HOST, PORT); });
|
||||||
|
|
||||||
|
auto se = detail::scope_exit([&] {
|
||||||
|
svr.stop();
|
||||||
|
t.join();
|
||||||
|
ASSERT_FALSE(svr.is_running());
|
||||||
|
});
|
||||||
|
|
||||||
|
svr.wait_until_ready();
|
||||||
|
|
||||||
|
Client cli(HOST, PORT);
|
||||||
|
|
||||||
|
{
|
||||||
|
Request req;
|
||||||
|
req.method = "GET";
|
||||||
|
req.path = "/";
|
||||||
|
req.params.emplace("test", "test_value");
|
||||||
|
auto res = cli.send(req);
|
||||||
|
ASSERT_TRUE(res);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto res = cli.Get("/", {{"test", "test_value"}}, Headers{});
|
||||||
|
ASSERT_TRUE(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST(ClientImplMethods, GetSocketTest) {
|
TEST(ClientImplMethods, GetSocketTest) {
|
||||||
httplib::Server svr;
|
httplib::Server svr;
|
||||||
svr.Get("/", [&](const httplib::Request & /*req*/, httplib::Response &res) {
|
svr.Get("/", [&](const httplib::Request & /*req*/, httplib::Response &res) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user