mirror of
https://github.com/SabreTools/SabreTools.RedumpLib.git
synced 2026-07-08 18:16:25 +00:00
71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using System;
|
|
using System.Net;
|
|
|
|
namespace SabreTools.RedumpLib.Legacy.Web
|
|
{
|
|
#if NET6_0_OR_GREATER
|
|
#pragma warning disable SYSLIB0014
|
|
#endif
|
|
internal class CookieWebClient : WebClient
|
|
{
|
|
/// <summary>
|
|
/// Last retrieved URL from a web request
|
|
/// </summary>
|
|
public Uri? LastUrl { get; private set; }
|
|
|
|
/// <summary>
|
|
/// The timespan to wait before the request times out.
|
|
/// </summary>
|
|
public TimeSpan Timeout { get; set; }
|
|
|
|
// https://stackoverflow.com/questions/1777221/using-cookiecontainer-with-webclient-class
|
|
private readonly CookieContainer _container = new();
|
|
|
|
/// <summary>
|
|
/// Get the last downloaded filename, if possible
|
|
/// </summary>
|
|
public string? GetLastFilename()
|
|
{
|
|
// If the response headers are null or empty
|
|
if (ResponseHeaders is null || ResponseHeaders.Count == 0)
|
|
return null;
|
|
|
|
// If we don't have the response header we care about
|
|
string? headerValue = ResponseHeaders.Get("Content-Disposition");
|
|
if (string.IsNullOrEmpty(headerValue))
|
|
return null;
|
|
|
|
// Extract the filename from the value
|
|
#if NETCOREAPP || NETSTANDARD2_1_OR_GREATER
|
|
return headerValue[(headerValue.IndexOf("filename=") + 9)..].Replace("\"", "");
|
|
#else
|
|
return headerValue.Substring(headerValue.IndexOf("filename=") + 9).Replace("\"", "");
|
|
#endif
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
protected override WebRequest GetWebRequest(Uri address)
|
|
{
|
|
WebRequest request = base.GetWebRequest(address);
|
|
if (request is HttpWebRequest webRequest)
|
|
{
|
|
webRequest.Timeout = (int)Timeout.TotalMilliseconds;
|
|
webRequest.CookieContainer = _container;
|
|
}
|
|
|
|
return request;
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
protected override WebResponse GetWebResponse(WebRequest request)
|
|
{
|
|
WebResponse response = base.GetWebResponse(request);
|
|
LastUrl = response.ResponseUri;
|
|
return response;
|
|
}
|
|
}
|
|
#if NET6_0_OR_GREATER
|
|
#pragma warning restore SYSLIB0014
|
|
#endif
|
|
}
|