From 02402d3ffd1027d7f4de40a6cbb80cf1fba3e1c7 Mon Sep 17 00:00:00 2001 From: Bruce Doan Date: Thu, 2 Jul 2015 03:01:21 +0700 Subject: Implement async `post` request --- lib/pure/httpclient.nim | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 -- cgit 1.4.1-2-gfad0