public static async Task Main() { Write("Enter URL:> "); var url = ReadLine(); var uri = new Uri(url); var request = HttpWebRequestExt.Create(uri) .DoNotTrack() .Accept(Any); using var response = await request .GetAsync() .ConfigureAwait(false); var contentType = Lookup(response.ContentType); WriteLine($"Status {response.StatusCode}"); WriteLine($"Content-Type {contentType.Value}"); WriteLine($"Content-Length {response.ContentLength}"); var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); var fileName = Path.Combine(desktop, PathExt.FixPath(uri.PathAndQuery.Substring(1))); var fileExt = Path.GetExtension(fileName).Substring(1); if (contentType?.PrimaryExtension is object && !contentType.Extensions.Contains(fileExt)) { fileName += "." + contentType.PrimaryExtension; } var file = new FileInfo(fileName); file.Directory.Create(); using var outStream = file.Create(); using var body = response.GetResponseStream(); using var progStream = new ProgressStream(body, response.ContentLength, new ConsoleProgress(), false); await progStream.CopyToAsync(outStream) .ConfigureAwait(false); }
private static async Task ParseApacheConfAsync(Dictionary <string, Group> groups) { using var response = await HttpWebRequestExt .Create(new Uri ("http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=co")) .Accept("text/plain") .GetAsync() .ConfigureAwait(false); using var stream = response.GetResponseStream(); using var reader = new StreamReader(stream); var searching = true; while (!reader.EndOfStream) { var line = await reader.ReadLineAsync() .ConfigureAwait(false); if (line.StartsWith("# ", StringComparison.Ordinal)) { line = line.Substring(2); } if (!searching) { var parts = line.Split(' ', '\t') .Where(p => p.Length > 0); var value = parts.First(); var extensions = parts.Skip(1).ToArray(); if (extensions.Length == 0) { extensions = null; } var slashIndex = value.IndexOf('/'); var groupName = value.Substring(0, slashIndex); var name = value.Substring(slashIndex + 1); var group = groups.GetGroup(groupName); name = name.CamelCase(); if (extensions == null) { var plusIndex = value.IndexOf('+'); if (0 <= plusIndex && plusIndex < value.Length - 1) { extensions = new string[] { value.Substring(plusIndex + 1) }; } } AddEntry(group, name, value, null, extensions); } else if (line.StartsWith("====================", StringComparison.Ordinal)) { searching = false; } } }
public async Task <T> GetIconAsync <T>(IImageCodec <T> decoder) { var request = HttpWebRequestExt.Create(IconURL); using var response = await request .GetAsync() .ConfigureAwait(false); return(decoder.Deserialize(response)); }
private static async Task ParseIANAXmlAsync(Dictionary <string, Group> groups) { using var response = await HttpWebRequestExt .Create(new Uri ("https://www.iana.org/assignments/media-types/media-types.xml")) .UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36") .Accept("text/xml") .GetAsync() .ConfigureAwait(false); using var stream = response.GetResponseStream(); var fullRegistry = XElement.Load(stream); ns = fullRegistry.GetDefaultNamespace(); var files = fullRegistry.Descendants(ns + "file"); foreach (var file in files) { var groupName = file.Parent.Parent.Attribute("id").Value; var nameAndDescription = file.Parent.Element(ns + "name").Value; var name = nameAndDescription; var deprecationMessageIndex = nameAndDescription.IndexOf(" ", StringComparison.Ordinal); var isDeprecated = deprecationMessageIndex >= 0; string deprecationMessage = null; if (isDeprecated) { deprecationMessage = nameAndDescription.Substring(deprecationMessageIndex + 1).Trim(); name = nameAndDescription.Substring(0, deprecationMessageIndex); if (deprecationMessage.StartsWith("-", StringComparison.Ordinal)) { deprecationMessage = deprecationMessage.Substring(1).Trim(); } } var value = $"{groupName}/{name.ToLowerInvariant()}"; var group = groups.GetGroup(groupName); var plusIndex = value.IndexOf('+'); string[] extensions = null; if (0 <= plusIndex && plusIndex < value.Length - 1) { extensions = new string[] { value.Substring(plusIndex + 1) }; } name = name.CamelCase(); AddEntry(group, name, value, deprecationMessage, extensions); } }