diff options
author | Bruce Doan <rgv151@gmail.com> | 2015-07-02 03:01:21 +0700 |
---|---|---|
committer | Bruce Doan <rgv151@gmail.com> | 2015-07-02 03:07:01 +0700 |
commit | 02402d3ffd1027d7f4de40a6cbb80cf1fba3e1c7 (patch) | |
tree | ba9b6e28078fded06bff6703b398131f31e539a1 | |
parent | 0d7e0e1b4fb9e99259eb9f2a1ad42a7c0136e48b (diff) | |
download | Nim-02402d3ffd1027d7f4de40a6cbb80cf1fba3e1c7.tar.gz |
Implement async `post` request
-rw-r--r-- | lib/pure/httpclient.nim | 18 |
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 |