使用C#中的WebClient下载大型Google云端硬盘文件

时间:2015-12-16 22:15:44

标签: c# cookies google-drive-api webclient downloadfile

我知道这个问题已经有了一些问题。在阅读完所有主题后,我决定在确认HTML页面中获取重定向的URL,然后将其用作下载的直接链接。

如您所知,直接下载链接的原始URL格式是这样的。

https://drive.google.com/uc?export=download&id=XXXXX ..

但是如果目标文件的大小很大,那就是这样的。

https://drive.google.com/uc?export=download&confirm=RRRR&id=XXXXX ..

我可以从首次下载的数据中获得RRRR,因此我需要尝试两次才能下载真实文件。这个概念非常简单,但我不能让它发挥作用。

class Test
{
    class MyWebClient: WebClient
    {
        CookieContainer c = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri u)
        {
            var r = (HttpWebRequest) base.GetWebRequest(u);
            r.CookieContainer = c;
            return r;
        }
    }

    static string GetRealURL(string filename)
    {
        // Some Jobs to Parse....
        return directLink;
    }

    static void Main()
    {
        MyWebClient wc = new MyWebClient();

        string targetLink = "https://drive.google.com/uc?export=download&id=XXXXXXX";
        wc.DownloadFile(targetLink, "tempFile.tmp");

        targetLink = GetRealURL("tempFile.tmp");
        wc.DownloadFile(targetLink, "realFile.dat");
    }
}

我错了什么? 我可以从第一个文件中获得正确的下载链接,但是我在第二次尝试时得到另一个确认页面文件和另一个确认代码。我认为这是因为cookie,所以我创建了自己的WebClient类,如上所示。

我最初使用DownloadFileAsync(),并将其更改为DownloadFile()以防万一,但结果相同.. 我仍然认为它与cookie有关。

我在这里缺少什么?

0 个答案:

没有答案