Mediafire的直接下载链接出现问题

本文关键字:问题 链接 下载 Mediafire | 更新日期: 2023-09-27 18:21:34

我从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;
    }
}

但当我运行它时,会弹出此错误:错误屏幕截图

我能做些什么来解决这个问题,你能解释一下这个错误的含义吗?

Mediafire的直接下载链接出现问题

首先,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,在某个起始位置start之后找到字符c的索引。该方法的第一行是检查起始值是否在源字符串的长度内,这样它就不会立即查看超出范围的字符并引发ArgumentOutOfRangeException。您需要在以下行设置一个断点:

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

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

此外,您使用的代码已经有5年的历史了,我认为这个问题更多地与Mediafire从那时起将更改URL结构有关。您的代码依赖于url包含"http://download"情况可能不再如此。

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

或者,您必须通过"download_link"类和获取包含标记的href来查询正确的div。这就是我在这些dll中解决它的方法。^^

或者使用MediaFire的API。

希望我能帮忙。