【问题标题】:Getting mediafire directlink without using WebBrowser .NET control?在不使用 WebBrowser .NET 控件的情况下获取 mediafire 直接链接?
【发布时间】:2010-11-13 15:19:24
【问题描述】:

我正在寻找从 mediafire 获取直接链接的方法。默认情况下,当用户访问下载链接时,他会看到一个下载页面,他必须等待下载处理完成,然后才会出现一个链接。

我在谷歌上搜索并找到了一个使用 WebBrowser WB 的 VB.NET 2008 解决方案

http://www.vbforums.com/showthread.php?t=556681

它工作得很好,但我厌倦了弹出窗口和加载速度。所以,我想知道是否有解决这个问题的方法? (非WB解决方案^^)

非常感谢任何帮助。

【问题讨论】:

  • 使用 Visual Basic 制作一个 GUI 界面.. 看看你是否可以从中获取 IP
  • 对不起,我不明白你的意思:D
  • 很抱歉,我只需要至少发布一次该引用:youtube.com/watch?v=hkDD03yeLnU 另一方面,您可以尝试以艰难的方式获取页面,而不是使用 WB 控件。 .

标签: .net hyperlink


【解决方案1】:

当我将正则表达式处理到代码中时,我会回帖,虽然我认为实际链接是通过 AJAX 获得的,但不确定这是否会起作用。我还在玩这个。

讨论的 AJAX 问题:StackOverflow related question


基于cmets中提供的php代码:

  • 第一个响应->获取传递的值 到一个名为的函数 “cG(var1,var2,var3)”我不认为 mediafire 仍然使用该功能, 它似乎被称为 “cu(var1,var2,var3)”现在,不确定是否 你给的 php 仍然可以工作。 无论如何,我们可以做同样的事情 来自 cu 函数的值 & 将我们的请求发布到 http://www.mediafire.com/dynamic/download.php? 使用我们从我们的 第一反应。
  • 第二个响应创建了这个巨大的 随机生成的变量列表, 然后生成下载地址 连接其中一些 变量,唯一的方法是 如果这是由using the Microsoft.JScript engine to evaluate this code 提供的网址。我会发布我的 尽快编码

代码(警告此代码很难看,需要清理):

  string sURL = "http://www.mediafire.com/?syzjuytmdkn";

  HttpWebRequest wrGETURL = (HttpWebRequest)WebRequest.Create(sURL);
  wrGETURL.CookieContainer = new CookieContainer();
  wrGETURL.Referer = "http://www.mediafire.com";
  wrGETURL.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

  HttpWebResponse wrResponse = (HttpWebResponse)wrGETURL.GetResponse();
  CookieCollection cookies = wrResponse.Cookies;

我们在这里发送第一个请求并存储收到的 cookie。接下来我们要解析页面以找出第二个请求的键:

  StreamReader objReader = new StreamReader(wrResponse.GetResponseStream());

  string[] parameters = {};//will contain the parameters fetched
  string html = objReader.ReadToEnd();
  int cupos1 = html.IndexOf("cu(");
  int cupos2 = html.IndexOf("')",cupos1);
  string[] separators = { "','"};

  parameters = html.Substring(cupos1 + 4, cupos2 - cupos1 - 4)
                   .Split(separators, StringSplitOptions.None);

获取包含编码下载网址的第二个页面:

  string sURL2 = String.Format("http://www.mediafire.com/dynamic/download.php?qk={0}&pk={1}&r={2}",
                       parameters[0],parameters[1],parameters[2]);

  HttpWebRequest wrGETURL2 = (HttpWebRequest)WebRequest.Create(sURL2);
  wrGETURL2.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
  wrGETURL2.Referer = "http://www.mediafire.com";

  wrGETURL2.CookieContainer = new CookieContainer();
  wrGETURL2.CookieContainer.Add(cookies);
  wrResponse = (HttpWebResponse)wrGETURL2.GetResponse();
  objReader = new StreamReader(wrResponse.GetResponseStream());
  html = objReader.ReadToEnd();

此 html 包含将生成下载 url 的 Javascript,我们在这里提取它,然后对其进行评估并最终将其写入控制台:

  int varpos1 = html.IndexOf("<script language=\"Javascript\">")+35;
  //The variables are declared just before the 'function'
  int varpos2 = html.IndexOf("function",varpos1);
  string vardata = html.Substring(varpos1, varpos2 - varpos1);

  int hrefpos1 = html.IndexOf("href=\\\"http://", varpos2)+6 ;
  int hrefpos2 = html.IndexOf(">", hrefpos1);
  string hrefdata = String.Format("var url = {0};", html.Substring(hrefpos1, hrefpos2 - hrefpos1-5));
  object Result = EvalJScript(vardata + "\n" + hrefdata);
  Console.WriteLine(Result.ToString());

这些东西对我有用,但需要重写,我也将 EvalJScript 函数留给你,因为我正在使用的函数(来自 Evaluating JScript in c#)已弃用

【讨论】:

  • 有一个 PHP 解决方案,但我不知道 PHP,所以我在这里发布以防有人需要它。 mysteryzillion.org/forums/showthread.php?t=4381
  • PHP 非常有用,显然 mediafire 代码设置了一个 cookie(在向 mediafire.com/dynamic/download.php 移动时需要包含该 cookie),cG 函数初始化 qk、pk 和 r 变量需要包含在 URL 请求中。这将返回一个需要评估以生成最终 url 的 javascript...
  • 谢谢,根据您的建议,我终于找到了使用 WebRequest 获取直接链接的方法:D。再次感谢您。
  • 不客气,我也刚刚弄清楚了。我的代码很丑,你介意发布一些你的代码吗?
【解决方案2】:
Dim req As HttpWebRequest, res As HttpWebResponse
Dim cok As New CookieContainer, str As String, match As Match
req = WebRequest.Create("http://www.mediafire.com/?65d1dftjwml")
req.CookieContainer = cok
res = req.GetResponse
str = New StreamReader(res.GetResponseStream).ReadToEnd
match = Regex.Match(str, "cu\('(.+)','(.+)','(.+)'\);")
Dim qk As String = match.Groups(1).Value
Dim pk As String = match.Groups(2).Value
Dim r As String = match.Groups(3).Value
Dim t As String = "http://www.mediafire.com/dynamic/download.php?qk=" & qk & "&pk=" & pk & "&r=" & r & "&ukey=" & res.Cookies.Item("ukey").Value

req = WebRequest.Create(t)
res = req.GetResponse
txtcode.Text = New StreamReader(res.GetResponseStream).ReadToEnd

【讨论】:

  • 这是我检索大量随机生成变量的代码。以下步骤就像您的代码一样。非常感谢你帮助我^^
  • 偶然发现了一个小技巧,可以使用 RegEX 获取最终变量:D。 var\s[a-z0-9]{6}='([a-z0-9]{11})';
【解决方案3】:

我原始答案的最后一段代码被截断 - 它显示了评估 jscript 的 C# 代码:

  int varpos1 = html.IndexOf("<script language=\"Javascript\">")+35;
  //The variables are declared just before the 'function'
  int varpos2 = html.IndexOf("function",varpos1);
  string vardata = html.Substring(varpos1, varpos2 - varpos1);

  int hrefpos1 = html.IndexOf("href=\\\"http://", varpos2)+6 ;
  int hrefpos2 = html.IndexOf(">", hrefpos1);
  string hrefdata = String.Format("var url = {0};", html.Substring(hrefpos1, hrefpos2 - hrefpos1-5));
  object Result = EvalJScript(vardata + "\n" + hrefdata);
  Console.WriteLine(Result.ToString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多