summaryrefslogtreecommitdiff
path: root/src/script/lua_api
diff options
context:
space:
mode:
authorLejo <Lejo_1@web.de>2020-07-30 00:16:21 +0300
committerGitHub <noreply@github.com>2020-07-29 23:16:21 +0200
commit715a123a33db7b0f191259ba68cbc9c565d0d4e8 (patch)
tree5925cc93ad339477d58dcea42bcf79b62e2ded5d /src/script/lua_api
parentf34abaedd2b9277c1862cd9b82ca3338747f104e (diff)
downloadminetest-715a123a33db7b0f191259ba68cbc9c565d0d4e8.tar.gz
minetest-715a123a33db7b0f191259ba68cbc9c565d0d4e8.tar.bz2
minetest-715a123a33db7b0f191259ba68cbc9c565d0d4e8.zip
Add PUT and DELETE request + specific method value to HTTP API (#9909)
Diffstat (limited to 'src/script/lua_api')
-rw-r--r--src/script/lua_api/l_http.cpp29
-rw-r--r--src/script/lua_api/l_http.h4
2 files changed, 28 insertions, 5 deletions
diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp
index ec43bf174..5ea3b3f99 100644
--- a/src/script/lua_api/l_http.cpp
+++ b/src/script/lua_api/l_http.cpp
@@ -49,17 +49,40 @@ void ModApiHttp::read_http_fetch_request(lua_State *L, HTTPFetchRequest &req)
req.multipart = getboolfield_default(L, 1, "multipart", false);
req.timeout = getintfield_default(L, 1, "timeout", 3) * 1000;
- // post_data: if table, post form data, otherwise raw data
+ lua_getfield(L, 1, "method");
+ if (lua_isstring(L, -1)) {
+ std::string mth = getstringfield_default(L, 1, "method", "");
+ if (mth == "GET")
+ req.method = HTTP_GET;
+ else if (mth == "POST")
+ req.method = HTTP_POST;
+ else if (mth == "PUT")
+ req.method = HTTP_PUT;
+ else if (mth == "DELETE")
+ req.method = HTTP_DELETE;
+ }
+ lua_pop(L, 1);
+
+ // post_data: if table, post form data, otherwise raw data DEPRECATED use data and method instead
lua_getfield(L, 1, "post_data");
+ if (lua_isnil(L, 2)) {
+ lua_pop(L, 1);
+ lua_getfield(L, 1, "data");
+ }
+ else {
+ req.method = HTTP_POST;
+ }
+
if (lua_istable(L, 2)) {
lua_pushnil(L);
while (lua_next(L, 2) != 0) {
- req.post_fields[readParam<std::string>(L, -2)] = readParam<std::string>(L, -1);
+ req.fields[readParam<std::string>(L, -2)] = readParam<std::string>(L, -1);
lua_pop(L, 1);
}
} else if (lua_isstring(L, 2)) {
- req.post_data = readParam<std::string>(L, 2);
+ req.raw_data = readParam<std::string>(L, 2);
}
+
lua_pop(L, 1);
lua_getfield(L, 1, "extra_headers");
diff --git a/src/script/lua_api/l_http.h b/src/script/lua_api/l_http.h
index de6e51b37..c3a2a5276 100644
--- a/src/script/lua_api/l_http.h
+++ b/src/script/lua_api/l_http.h
@@ -32,10 +32,10 @@ private:
static void read_http_fetch_request(lua_State *L, HTTPFetchRequest &req);
static void push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool completed = true);
- // http_fetch_sync({url=, timeout=, post_data=})
+ // http_fetch_sync({url=, timeout=, data=})
static int l_http_fetch_sync(lua_State *L);
- // http_fetch_async({url=, timeout=, post_data=})
+ // http_fetch_async({url=, timeout=, data=})
static int l_http_fetch_async(lua_State *L);
// http_fetch_async_get(handle)