(C#)如何获取某个路径的下载URL?

时间:2017-05-07 11:18:43

标签: c# http web get

所以,让我们说我有一个下载网址,当你获取它时,它会下载一个文件。 现在,这个文件不是txt或任何东西,它没有扩展名。 我如何编写GET请求到URL,但是将其下载到某个路径? 编辑:另外,如何将其转换为TXT并在之后从txt读取? 注意:它是一个即时下载文件的get请求站点,而不是您可以在浏览器中打开的站点上的文件 编辑2:它实际上返回xml,而不是文件,抱歉 只需使用浏览器即可下载。

1 个答案:

答案 0 :(得分:0)

你这样做,如果你的链接有一个清晰的结局,就像我使用的那样,这应该无关紧要。或者,如果您真的认真地使GET部分明确使用RestSharp。现在看,您甚至可以从代码中更改文件扩展名,而不是最重要的一点。我扔了一些Linq2Xml,因为你提到你的文件是xml,我认为你可能需要用它做点什么。

using System;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Xml.Linq;
using System.Linq;
using RestSharp;

namespace Get2File
{
    internal class Program
    {
        private const string FallbackUrl = @"https://gist.github.com/Rusk85/8d189cd35295cfbd272d8c2121110e38/raw/4885d9ba37528faab50d9307f76800e2e1121ea2/example-xml-with-embedded-html.xml";

        private string _downloadedContent = null;

        private const string FileNameWithoutExtension = "File";

        private static void Main(string[] args)
        {
            var p = new Program();
            p.Get2FileWithRestSharp(fileExtensions:".xml");
            p.UseLinq2XmlOnFile();
        }

        private void Get2File(string altUrl = null, string fileExtensions = ".txt")
        {
            var url = !string.IsNullOrEmpty(altUrl)
                ? altUrl
                : FallbackUrl;
            var client = new HttpClient();
            var content = client.GetStringAsync(url).Result;
            _downloadedContent = content;
            var outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{FileNameWithoutExtension}{fileExtensions}");
            File.WriteAllText(outputPath, content);
        }

        private void Get2FileWithRestSharp(string altUrl = null, string fileExtensions = ".txt")
        {
            var url = !string.IsNullOrEmpty(altUrl)
                ? altUrl
                : FallbackUrl;
            var urlAsUri = new Uri(url);
            var client = new RestClient(urlAsUri);
            var request = new RestRequest(Method.GET);
            var content = string.Empty;
            var result = client.Execute(request);
            content = result.Content;
            _downloadedContent = content;
            var output = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{FileNameWithoutExtension}{fileExtensions}");
            File.WriteAllText(output, content);
        }


        private void UseLinq2XmlOnFile()
        {
            XElement xElement = XElement.Parse(_downloadedContent);
            var elements = xElement.Elements();
            var StringElement = elements.FirstOrDefault(e => e.Name == "String");
            var tranlateXAttribute = StringElement.Attributes().FirstOrDefault(attr => attr.Name == "translate");
            Debug.WriteLine(tranlateXAttribute.Value);
        }
    }
}