Skip to content

Commit 48520df

Browse files
committed
Fixed issue #220: Some servers don't like the Range header and respond with errors like 403, 404 or 503. even though the file is perfectly downloadable with a normal request (no Range header).
1 parent 6067ac5 commit 48520df

3 files changed

Lines changed: 20 additions & 13 deletions

File tree

src/Downloader.Test/IntegrationTests/DownloadIntegrationTest.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -620,19 +620,22 @@ public async Task TestResumeImmediatelyAfterCanceling()
620620
cancellationCompleted.TrySetResult(true);
621621
};
622622
Downloader.DownloadProgressChanged += async (_, e) => {
623-
try
623+
if (canStopDownload && e.ProgressPercentage > 50)
624624
{
625-
await semaphoreSlim.WaitAsync();
626-
if (canStopDownload && e.ProgressPercentage > 50)
625+
try
627626
{
628-
canStopDownload = false;
629-
lastProgressPercentage = e.ProgressPercentage;
630-
await Downloader.CancelTaskAsync();
627+
await semaphoreSlim.WaitAsync();
628+
if (canStopDownload)
629+
{
630+
canStopDownload = false;
631+
lastProgressPercentage = e.ProgressPercentage;
632+
await Downloader.CancelTaskAsync();
633+
}
634+
}
635+
finally
636+
{
637+
semaphoreSlim.Release();
631638
}
632-
}
633-
finally
634-
{
635-
semaphoreSlim.Release();
636639
}
637640
};
638641

src/Downloader/Downloader.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<TargetFrameworks>net8.0;net9.0;net10.0;</TargetFrameworks>
44
<LangVersion>latestMajor</LangVersion>
5-
<Version>5.1.1</Version>
5+
<Version>5.2.0</Version>
66
<Title>Downloader</Title>
77
<Authors>Behzad Khosravifar</Authors>
88
<Company>bezzad</Company>
@@ -11,6 +11,7 @@
1111
<RepositoryUrl>https://github.com/bezzad/Downloader</RepositoryUrl>
1212
<PackageTags>download-manager, downloader, download, idm, internet, streaming, download-file, stream-downloader, multipart-download</PackageTags>
1313
<PackageReleaseNotes>
14+
* Fixed issue #220: Some servers don't like the Range header and respond with errors like 403, 404 or 503. even though the file is perfectly downloadable with a normal request (no Range header).
1415
* Fixed issue #221: resolved file corruption when using ChunkCount on small files by ensuring the final byte of each chunk (especially the last chunk) is written correctly.
1516
</PackageReleaseNotes>
1617
<SignAssembly>true</SignAssembly>

src/Downloader/SocketClient.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,12 @@ private async Task FetchResponseHeaders(Request request, bool addRange, Cancella
187187
}
188188
catch (HttpRequestException exp)
189189
{
190-
if (addRange && exp.IsRequestedRangeNotSatisfiable())
190+
// issue #220: Some servers don't like the Range header and respond with errors like
191+
// 403 (Forbidden), 404 (Not Found), or 503 (Service Unavailable)
192+
// even though the file is perfectly downloadable with a normal request (no Range header).
193+
if (addRange && (exp.IsRequestedRangeNotSatisfiable() || !exp.IsRedirectError()))
191194
{
192-
await FetchResponseHeaders(request, false, cancelToken).ConfigureAwait(false);
195+
await FetchResponseHeaders(request, false, cancelToken);
193196
}
194197
else if (request.Configuration.AllowAutoRedirect &&
195198
exp.IsRedirectError() &&

0 commit comments

Comments
 (0)