Add client.close() in httpclient examples. (#20118)

Without this, the httpclient examples are essentially setting you up for failure. I was bitten by this when my app became unable to open any more sockets.

I'm not entirely sure how long this will relevant, as I hope destructors will be added to an upcoming version of the stdlib. But figured it was worth submitting anyways!
This commit is contained in:
gecko 2022-08-04 05:46:08 +01:00 • committed by GitHub
commit 7af484da94
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -19,7 +19,10 @@
## .. code-block:: Nim ## .. code-block:: Nim
## import std/httpclient ## import std/httpclient
## var client = newHttpClient() ## var client = newHttpClient()
## echo client.getContent("http://google.com") ## try:
## echo client.getContent("http://google.com")
## finally:
## client.close()
## ##
## The same action can also be performed asynchronously, simply use the ## The same action can also be performed asynchronously, simply use the
## `AsyncHttpClient`: ## `AsyncHttpClient`:
@ -29,7 +32,10 @@
## ##
## proc asyncProc(): Future[string] {.async.} = ## proc asyncProc(): Future[string] {.async.} =
## var client = newAsyncHttpClient() ## var client = newAsyncHttpClient()
## return await client.getContent("http://example.com") ## try:
## return await client.getContent("http://example.com")
## finally:
## client.close()
## ##
## echo waitFor asyncProc() ## echo waitFor asyncProc()
## ##
@ -53,8 +59,10 @@
## data["output"] = "soap12" ## data["output"] = "soap12"
## data["uploaded_file"] = ("test.html", "text/html", ## data["uploaded_file"] = ("test.html", "text/html",
## "<html><head></head><body><p>test</p></body></html>") ## "<html><head></head><body><p>test</p></body></html>")
## ## try:
## echo client.postContent("http://validator.w3.org/check", multipart=data) ## echo client.postContent("http://validator.w3.org/check", multipart=data)
## finally:
## client.close()
## ##
## To stream files from disk when performing the request, use `addFiles`. ## To stream files from disk when performing the request, use `addFiles`.
## ##
@ -66,8 +74,10 @@
## var client = newHttpClient() ## var client = newHttpClient()
## var data = newMultipartData() ## var data = newMultipartData()
## data.addFiles({"uploaded_file": "test.html"}, mimeDb = mimes) ## data.addFiles({"uploaded_file": "test.html"}, mimeDb = mimes)
## ## try:
## echo client.postContent("http://validator.w3.org/check", multipart=data) ## echo client.postContent("http://validator.w3.org/check", multipart=data)
## finally:
## client.close()
## ##
## You can also make post requests with custom headers. ## You can also make post requests with custom headers.
## This example sets `Content-Type` to `application/json` ## This example sets `Content-Type` to `application/json`
@ -81,8 +91,11 @@
## let body = %*{ ## let body = %*{
## "data": "some text" ## "data": "some text"
## } ## }
## let response = client.request("http://some.api", httpMethod = HttpPost, body = $body) ## try:
## echo response.status ## let response = client.request("http://some.api", httpMethod = HttpPost, body = $body)
## echo response.status
## finally:
## client.close()
## ##
## Progress reporting ## Progress reporting
## ================== ## ==================
@ -101,7 +114,10 @@
## proc asyncProc() {.async.} = ## proc asyncProc() {.async.} =
## var client = newAsyncHttpClient() ## var client = newAsyncHttpClient()
## client.onProgressChanged = onProgressChanged ## client.onProgressChanged = onProgressChanged
## discard await client.getContent("http://speedtest-ams2.digitalocean.com/100mb.test") ## try:
## discard await client.getContent("http://speedtest-ams2.digitalocean.com/100mb.test")
## finally:
## client.close()
## ##
## waitFor asyncProc() ## waitFor asyncProc()
## ##