2017-07-17 15:30:52 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
template<typename TReq, typename TRes>
|
2017-07-20 23:26:51 +08:00
|
|
|
bool http_request(const char* addr, TReq& req, TRes& res)
|
2017-07-17 15:30:52 +08:00
|
|
|
{
|
|
|
|
acl::string body;
|
|
|
|
serialize<TReq>(req, body);
|
|
|
|
|
|
|
|
acl::http_request conn(addr, 30, 30);
|
|
|
|
acl::string url;
|
2017-07-20 23:26:51 +08:00
|
|
|
url.format("/?cmd=%s", req.cmd.c_str());
|
|
|
|
conn.request_header().set_url(url).set_keep_alive(false)
|
|
|
|
.set_content_type("text/json");
|
|
|
|
|
2017-07-17 15:30:52 +08:00
|
|
|
if (conn.request(body, body.size()) == false)
|
|
|
|
{
|
|
|
|
printf("request error, json=[%s]\r\n", body.c_str());
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
acl::json json;
|
|
|
|
if (conn.get_body(json) == false)
|
|
|
|
{
|
|
|
|
printf("get_body error, json=[%s]\r\n", body.c_str());
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (deserialize<TRes>(json, res) == false)
|
|
|
|
{
|
|
|
|
printf("deserialize error, res json=[%s], req json=[%s]\r\n",
|
|
|
|
json.to_string().c_str(), body.c_str());
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2017-07-21 15:38:28 +08:00
|
|
|
//printf(">>>%s\r\n", json.to_string().c_str());
|
2017-07-17 15:30:52 +08:00
|
|
|
return true;
|
|
|
|
}
|