diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml
index 65dcfc468d..7e02d47905 100644
--- a/Docs/Luadoc/Lua.xml
+++ b/Docs/Luadoc/Lua.xml
@@ -1110,6 +1110,8 @@
+
+
diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml
index a7be9c3084..0deea3d979 100644
--- a/Docs/Luadoc/LuaDocumentation.xml
+++ b/Docs/Luadoc/LuaDocumentation.xml
@@ -3603,6 +3603,12 @@ NETWORK:HttpRequest{
}
+
+ Returns the URL encoded representation of value.
+
+
+ Returns the query encoded as a query string. Keys and values are automatically URL encoded.
+
diff --git a/src/NetworkManager.cpp b/src/NetworkManager.cpp
index 07a1609a37..565ef8e175 100644
--- a/src/NetworkManager.cpp
+++ b/src/NetworkManager.cpp
@@ -10,6 +10,7 @@
#include
#include
+#include
#include
@@ -115,6 +116,16 @@ void NetworkManager::HttpRequest(const HttpRequestArgs& args)
this->httpClient.performRequest(req, args.onResponse);
}
+std::string NetworkManager::UrlEncode(const std::string& value)
+{
+ return this->httpClient.urlEncode(value);
+}
+
+std::string NetworkManager::EncodeQueryParameters(const std::unordered_map& query)
+{
+ return this->httpClient.serializeHttpParameters(query);
+}
+
// lua start
#include "LuaBinding.h"
@@ -306,10 +317,60 @@ public:
return 1;
}
+ static int UrlEncode(T* p, lua_State *L)
+ {
+ std::string url = SArg(1);
+
+ std::string encoded = p->UrlEncode(url);
+
+ lua_pushstring(L, encoded.c_str());
+ return 1;
+ }
+
+ static int EncodeQueryParameters(T* p, lua_State *L)
+ {
+ std::unordered_map query;
+
+ if (lua_istable(L, 1))
+ {
+ lua_pushnil(L);
+ while(lua_next(L, -2) != 0)
+ {
+ if (!lua_isstring(L, -2))
+ {
+ luaL_error(L, "parameter keys must be strings");
+ }
+
+ if (!lua_isstring(L, -1))
+ {
+ luaL_error(L, "parameter values must be strings");
+ }
+
+ std::string key = lua_tostring(L, -2);
+ std::string value = lua_tostring(L, -1);
+
+ query[key] = value;
+
+ lua_pop(L, 1);
+ }
+ }
+ else
+ {
+ luaL_error(L, "query must be a table");
+ }
+
+ std::string encoded = p->EncodeQueryParameters(query);
+
+ lua_pushstring(L, encoded.c_str());
+ return 1;
+ }
+
LunaNetworkManager()
{
ADD_METHOD(IsUrlAllowed);
ADD_METHOD(HttpRequest);
+ ADD_METHOD(UrlEncode);
+ ADD_METHOD(EncodeQueryParameters);
}
private:
diff --git a/src/NetworkManager.h b/src/NetworkManager.h
index be83c83085..93b96c2381 100644
--- a/src/NetworkManager.h
+++ b/src/NetworkManager.h
@@ -5,8 +5,8 @@
#include "StdString.h"
#include
-#include