From 98c674d915a1480ad98ec48e58468533226d6c53 Mon Sep 17 00:00:00 2001 From: Paul Kulchenko Date: Sat, 10 Jul 2021 12:39:02 -0700 Subject: [PATCH] Update Fetch() to POST if body is provided (#211) --- tool/net/redbean.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/tool/net/redbean.c b/tool/net/redbean.c index ff534d1555a..e32f71c2bd7 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -3438,14 +3438,14 @@ static int LuaFetch(lua_State *L) { bool usessl; uint32_t ip; struct Url url; - int t, ret, sock; + int t, ret, sock, method; char *host, *port; struct TlsBio *bio; struct Buffer inbuf; struct addrinfo *addr; struct HttpMessage msg; struct HttpUnchunker u; - const char *urlarg, *request; + const char *urlarg, *request, *body; size_t urlarglen, requestlen; size_t g, i, n, hdrsize, paylen; struct addrinfo hints = {.ai_family = AF_INET, @@ -3457,6 +3457,14 @@ static int LuaFetch(lua_State *L) { * Get args. */ urlarg = luaL_checklstring(L, 1, &urlarglen); + if (lua_isnoneornil(L, 2)) { + body = ""; + method = kHttpGet; + } else { + size_t bodylen; + body = luaL_checklstring(L, 2, &bodylen); + method = kHttpPost; + } /* * Parse URL. @@ -3508,12 +3516,12 @@ static int LuaFetch(lua_State *L) { /* * Create HTTP message. */ - request = gc(xasprintf("GET %s HTTP/1.1\r\n" + request = gc(xasprintf("%s %s HTTP/1.1\r\n" "Host: %s:%s\r\n" "Connection: close\r\n" "User-Agent: %s\r\n" - "\r\n", - gc(EncodeUrl(&url, 0)), host, port, brand)); + "\r\n%s", + kHttpMethod[method], gc(EncodeUrl(&url, 0)), host, port, brand, body)); requestlen = strlen(request); /* @@ -3571,7 +3579,7 @@ static int LuaFetch(lua_State *L) { /* * Send HTTP Message. */ - DEBUGF("client sending"); + DEBUGF("client sending %s request", kHttpMethod[method]); if (usessl) { ret = mbedtls_ssl_write(&sslcli, request, requestlen); if (ret != requestlen) {