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;
}
}
但当我运行它时,会弹出此错误:错误屏幕截图
我能做些什么来解决这个问题,你能解释一下这个错误的含义吗?
首先,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。
希望我能帮忙。