summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBruce Doan <rgv151@gmail.com>2015-07-02 03:01:21 +0700
committerBruce Doan <rgv151@gmail.com>2015-07-02 03:07:01 +0700
commit02402d3ffd1027d7f4de40a6cbb80cf1fba3e1c7 (patch)
treeba9b6e28078fded06bff6703b398131f31e539a1
parent0d7e0e1b4fb9e99259eb9f2a1ad42a7c0136e48b (diff)
downloadNim-02402d3ffd1027d7f4de40a6cbb80cf1fba3e1c7.tar.gz
Implement async `post` request
-rw-r--r--lib/pure/httpclient.nim18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim
index 6a2913713..2ca2098b3 100644
--- a/lib/pure/httpclient.nim
+++ b/lib/pure/httpclient.nim
@@ -821,6 +821,24 @@ proc get*(client: AsyncHttpClient, url: string): Future[Response] {.async.} =
       result = await client.request(redirectTo, httpGET)
       lastUrl = redirectTo
 
+proc post*(client: AsyncHttpClient, url: string, body = "", multipart: MultipartData = nil): Future[Response] {.async.} =
+  ## Connects to the hostname specified by the URL and performs a POST request.
+  ##
+  ## This procedure will follow redirects up to a maximum number of redirects
+  ## specified in ``newAsyncHttpClient``.
+  let (mpHeader, mpBody) = format(multipart)
+
+  template withNewLine(x): expr =
+    if x.len > 0 and not x.endsWith("\c\L"):
+      x & "\c\L"
+    else:
+      x
+  var xb = mpBody.withNewLine() & body
+  client.headers["Content-Type"] = mpHeader.split(": ")[1]
+  client.headers["Content-Length"] = $len(xb)
+
+  result = await client.request(url, httpPOST, xb)
+      
 when not defined(testing) and isMainModule:
   when true:
     # Async