From 3d198fdcc237aa3927ad5c3b934688de24499b03 Mon Sep 17 00:00:00 2001 From: xioren <40043405+xioren@users.noreply.github.com> Date: Thu, 11 Mar 2021 23:09:39 -0800 Subject: [PATCH] Relocate 4xx/5xx exception in downloadFile (#17332) [backport:1.2] Move 4xx/5xx exception to before disk i/o. As it stands an empty file is created on http error 4xx/5xx. --- lib/pure/httpclient.nim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim index 9c39cb53b..4f5a33ee7 100644 --- a/lib/pure/httpclient.nim +++ b/lib/pure/httpclient.nim @@ -1219,6 +1219,9 @@ proc downloadFile*(client: HttpClient, url: Uri | string, filename: string) = defer: client.getBody = true let resp = client.get(url) + + if resp.code.is4xx or resp.code.is5xx: + raise newException(HttpRequestError, resp.status) client.bodyStream = newFileStream(filename, fmWrite) if client.bodyStream.isNil: @@ -1226,14 +1229,14 @@ proc downloadFile*(client: HttpClient, url: Uri | string, filename: string) = parseBody(client, resp.headers, resp.version) client.bodyStream.close() - if resp.code.is4xx or resp.code.is5xx: - raise newException(HttpRequestError, resp.status) - proc downloadFileEx(client: AsyncHttpClient, url: Uri | string, filename: string): Future[void] {.async.} = ## Downloads `url` and saves it to `filename`. client.getBody = false let resp = await client.get(url) + + if resp.code.is4xx or resp.code.is5xx: + raise newException(HttpRequestError, resp.status) client.bodyStream = newFutureStream[string]("downloadFile") var file = openAsync(filename, fmWrite) @@ -1248,9 +1251,6 @@ proc downloadFileEx(client: AsyncHttpClient, # `bodyStream` has been written to the file. await file.writeFromStream(client.bodyStream) - if resp.code.is4xx or resp.code.is5xx: - raise newException(HttpRequestError, resp.status) - proc downloadFile*(client: AsyncHttpClient, url: Uri | string, filename: string): Future[void] = result = newFuture[void]("downloadFile")