# HG changeset patch # User amazy # Date 1486066146 -3600 # Node ID cd70a86618b45688999e7287a1b7a6efa2f11d63 # Parent b8e07269da72ea31b0f069c95fd9ee2bbf5ad3bb added Http headers support to HttpPost/Get/Put/Delete diff -r b8e07269da72 -r cd70a86618b4 Core/Lua/LuaContext.cpp --- a/Core/Lua/LuaContext.cpp Thu Feb 02 15:08:33 2017 +0100 +++ b/Core/Lua/LuaContext.cpp Thu Feb 02 21:09:06 2017 +0100 @@ -62,7 +62,6 @@ return true; } - LuaContext& LuaContext::GetLuaContext(lua_State *state) { const void* value = GetGlobalVariable(state, "_LuaContext"); @@ -210,14 +209,37 @@ return true; } + void LuaContext::SetHttpHeaders(lua_State *state, int top) + { + this->httpClient_.ClearHeaders(); // always reset headers in case they have been set in a previous request + + if (lua_gettop(state) >= top) + { + Json::Value headers; + this->GetJson(headers, top, true); + + Json::Value::Members members = headers.getMemberNames(); + + for (Json::Value::Members::const_iterator + it = members.begin(); it != members.end(); ++it) + { + this->httpClient_.AddHeader(*it, headers[*it].asString()); + } + LOG(ERROR) << "4"; + } + + } + + int LuaContext::CallHttpGet(lua_State *state) { LuaContext& that = GetLuaContext(state); // Check the types of the arguments int nArgs = lua_gettop(state); - if (nArgs != 1 || !lua_isstring(state, 1)) // URL + if ((nArgs < 1 or nArgs > 2) || // check args count + !lua_isstring(state, 1)) // URL is a string { LOG(ERROR) << "Lua: Bad parameters to HttpGet()"; lua_pushnil(state); @@ -228,6 +250,8 @@ const char* url = lua_tostring(state, 1); that.httpClient_.SetMethod(HttpMethod_Get); that.httpClient_.SetUrl(url); + that.httpClient_.GetBody().clear(); + that.SetHttpHeaders(state, 2); // Do the HTTP GET request if (!that.AnswerHttpQuery(state)) @@ -247,9 +271,9 @@ // Check the types of the arguments int nArgs = lua_gettop(state); - if ((nArgs != 1 && nArgs != 2) || - !lua_isstring(state, 1) || // URL - (nArgs >= 2 && !lua_isstring(state, 2))) // Body data + if ((nArgs < 1 || nArgs > 3) || // check arg count + !lua_isstring(state, 1) || // URL is a string + (nArgs >= 2 && (!lua_isstring(state, 2) && !lua_isnil(state, 2)))) // Body data is null or is a string { LOG(ERROR) << "Lua: Bad parameters to HttpPost() or HttpPut()"; lua_pushnil(state); @@ -260,8 +284,9 @@ const char* url = lua_tostring(state, 1); that.httpClient_.SetMethod(method); that.httpClient_.SetUrl(url); + that.SetHttpHeaders(state, 3); - if (nArgs >= 2) + if (nArgs >= 2 && !lua_isnil(state, 2)) { that.httpClient_.SetBody(lua_tostring(state, 2)); } @@ -299,7 +324,7 @@ // Check the types of the arguments int nArgs = lua_gettop(state); - if (nArgs != 1 || !lua_isstring(state, 1)) // URL + if (nArgs < 1 || nArgs > 2 || !lua_isstring(state, 1)) // URL { LOG(ERROR) << "Lua: Bad parameters to HttpDelete()"; lua_pushnil(state); @@ -310,6 +335,8 @@ const char* url = lua_tostring(state, 1); that.httpClient_.SetMethod(HttpMethod_Delete); that.httpClient_.SetUrl(url); + that.httpClient_.GetBody().clear(); + that.SetHttpHeaders(state, 2); // Do the HTTP DELETE request std::string s; diff -r b8e07269da72 -r cd70a86618b4 Core/Lua/LuaContext.h --- a/Core/Lua/LuaContext.h Thu Feb 02 15:08:33 2017 +0100 +++ b/Core/Lua/LuaContext.h Thu Feb 02 21:09:06 2017 +0100 @@ -83,6 +83,8 @@ void GetJson(Json::Value& result, int top, bool keepStrings); + + void SetHttpHeaders(lua_State* state, int top); public: LuaContext();