pistache
pistache copied to clipboard
Multiple Query Parameter Example
Hi all! Pistache n00b here!
Does anyone have any examples of using curl POST using multiple http query parameters?
Something like this: http://localhost:9080/ping?chunked&foo=0&bar=0
I have some example code but so far im not having very much luck! It is essentially modifying a rest_server example and the http_server example!
Does Pistache support what im looking for?
#include <pistache/router.h>
#include "pistache/endpoint.h"
#include "pistache/http.h"
#include <iostream>
using namespace Pistache;
using namespace Rest;
Rest::Router router;
void kimchi(const Rest::Request& request, Http::ResponseWriter response)
{
std::cout << "We have contact... pour the soju!" << std::endl;
response.send(Http::Code::Ok, "Bottoms Up\n");
}
void about(const Rest::Request& request, Http::ResponseWriter response)
{
std::cout << "Server Running" << std::endl;
response.send(Http::Code::Ok, request.body());
}
void param_test(const Rest::Request& request, Http::ResponseWriter response)
{
if (request.method() == Http::Method::Post)
{
using namespace Http;
auto query = request.query();
if (query.has("chunked") && query.has("foo=0") && query.has("bar=0")) // <-- Place multiple query params here
{
std::cout << "Using chunked encoding \n";
response.headers()
.add<Header::Server>("pistache/0.1")
.add<Header::ContentType>(MIME(Text, Plain));
response.cookies()
.add(Cookie("lang", "en-US"));
auto stream = response.stream(Http::Code::Ok);
stream << "GRAB ";
stream << "THE ";
stream << "SOJU \n";
stream << ends;
std::cout << "Http query: " << query.as_str() << "\n";
std::cout << request.body();
}
else { // <-- Default response
response.send(Http::Code::Ok, "Just a water please \n");
std::cout << "Http query: " << query.as_str() << "\n";
std::cout << request.body();
}
}
}
int main()
{
Routes::Get(router,"/ready", Routes::bind(&kimchi));
Routes::Post(router,"/ping", Routes::bind(¶m_test));
Routes::Post(router,"/about",Routes::bind(&about));
Pistache::Address addr(Pistache::Ipv4::any(), Pistache::Port(9080));
int thr = 8;
auto opts = Pistache::Http::Endpoint::options()
.threads(thr).flags(
Pistache::Tcp::Options::ReuseAddr);
std::cout << "Number of cores: " << std::thread::hardware_concurrency() << "\n";
std::cout << "Number of threads " << thr << "\n";
Http::Endpoint server(addr);
server.init(opts);
server.setHandler(router.handler());
server.serve();
return 0;
}
I found out this line
if (query.has("chunked") && query.has("foo=0") && query.has("bar=0"))
was the issue.
This is what it should be:
if (query.has("chunked") && query.has("foo") && query.has("bar"))
and the actual curl command should look like this:
curl -X POST http://localhost:9080/ping?chunked&foo=0&bar=0