0

我无法从 Mediafire 下载文件。我发现我必须使用他们的 API。我发现了另一个 SO 问题:从 Mediafire.com 获取直接下载链接和文件站点

在所示函数的帮助下,我创建了以下类:

class Program
{
    static void Main(string[] args)
    {
        Mediafireclass mf = new Mediafireclass();
        WebClient webClient = new WebClient();

        mf.Mediafiredownload("somemediafirelink/test.txt");
        webClient.DownloadFileAsync(new Uri("somemediafirelink/test.txt"), @"location to save/test.txt"); 
    }

}

并像这样使用 T3KBAU5 的功能:

internal class Mediafireclass
{
    public string Mediafiredownload(string download)
    {
        HttpWebRequest req;
        HttpWebResponse res;
        string str = "";
        req = (HttpWebRequest)WebRequest.Create(download);
        res = (HttpWebResponse)req.GetResponse();
        str = new StreamReader(res.GetResponseStream()).ReadToEnd();
        int indexurl = str.IndexOf("http://download");
        int indexend = GetNextIndexOf('"', str, indexurl);
        string direct = str.Substring(indexurl, indexend - indexurl);
        return direct;
    }

    private int GetNextIndexOf(char c, string source, int start)
    {
        if (start < 0 || start > source.Length - 1)
        {
            throw new ArgumentOutOfRangeException();
        }
        for (int i = start; i < source.Length; i++)
        {
            if (source[i] == c)
            {
                return i;
            }
        }
        return -1;
    }
}

但是当我运行它时,会弹出这个错误: 错误的截图

我能做些什么来解决这个问题,你能解释一下这个错误是什么意思吗?

4

2 回答 2

0

最简单的方法是使用 dll 文件。比如DirektDownloadLinkCatcher

或者你必须通过“download_link”类和获取包含标签的href来查询正确的div。这就是我在这些dll中解决它的方式。^^

或者使用 MediaFire 的 API。

希望我能帮上忙。

于 2016-04-04T15:53:25.537 回答
0

首先,Mediafiredownload 方法返回一个字符串,即您未使用的直接下载链接。您的代码应类似于:

Mediafireclass mf = new Mediafireclass();
WebClient webClient = new WebClient();

string directLink = mf.Mediafiredownload("somemediafirelink/test.txt");
webClient.DownloadFileAsync(new Uri(directLink), @"location to save/test.txt");

至于它触发的异常,重要的是要了解 GetNextIndexOf 方法在做什么 - 遍历字符串 source 以找到字符 c 的索引,在某个起始位置之后开始。该方法的第一行是检查起始值是否在源字符串的长度范围内,因此它不会立即查看超出范围的字符并引发 ArgumentOutOfRangeException。您需要在此行设置断点:

int indexend = GetNextIndexOf('"', str, indexurl);

并使用本地窗口查看 str 和 indexurl 的值。这将揭示问题。

此外,您使用的代码已经有将近 5 年的历史了,我希望这个问题更多地与 Mediafire 从那时起更改 URL 结构这一事实有关。您的代码依赖于 url 包含“ http://download ”这一事实,这可能不再是这种情况。

于 2015-11-10T18:35:29.797 回答