我无法从Mediafire下载文件。我发现我必须使用他们的API。我发现了另一个问题:"Get direct download link and file site from 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;
}
}
但是当我运行它时会弹出这个错误: Screenshot of the Error
我该怎么做才能解决问题,你能解释一下这个错误意味着什么吗?
答案 0 :(得分: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方法正在做什么很重要 - 在一定的开始之后迭代字符串,源,找到字符的索引c位置,开始。该方法的第一行是检查起始值是否在源字符串的长度内,这样它就不会立即查看该范围之外的字符并抛出ArgumentOutOfRangeException。您需要在此行上设置断点:
int indexend = GetNextIndexOf('"', str, indexurl);
使用locals窗口查看str和indexurl的值。这将揭示问题。
此外,您使用的代码已有近5年的历史,我预计此问题更多地与Mediafire此后已更改URL结构的事实有关。您的代码依赖于网址包含&#34; http://download&#34;可能不再是这种情况了。
答案 1 :(得分:0)
最简单的方法是使用dll文件。例如DirektDownloadLinkCatcher。
或者你必须通过“download_link”类查询正确的div并获取包含标记的href。这就是我在这些dll中解决它的方式。^^
或使用MediaFire中的API。
希望我能提供帮助。