WebClient 下载文件工作不正常

WebClient Download File Working Incorrectly

大家好,我正在尝试编写一个游戏补丁程序,所以我正在下载一个文件来查找版本我已经对应该使用什么代码进行了大量研究,所有不同的方法都会产生相同的结果

            WebClient downloadClient = new WebClient();
            Uri url = new Uri("http://theblademasterrpg.com/Patcher/data/p.dat");
            downloadClient.DownloadFile(url, Application.StartupPath + "\p2.dat");
            downloadClient.Dispose();
            FileStream file = new FileStream(Application.StartupPath + "\p2.dat", FileMode.Open, FileAccess.Read);

            string fileContents;
            using (StreamReader reader1 = new StreamReader(file))
            {
                fileContents = reader1.ReadToEnd();
            }

该文件似乎可以下载,但它不正确该文件中只有文本,如 1.0

无论我做什么,它总是显示这个,甚至将它更改为 html 文件

我忍不住认为这是与网络服务器相关的东西,所以我尝试了 apache 而不是 iis,结果相同

有没有其他人过期这个我宁愿下载 http 并避免 ftp

该网站不会轻易为您提供该文件。您需要稍微分析一下初始响应,您正在寻找这个字符串:

<frame src="http://71.82.23.25:8080/Patcher/data/p.dat" name="redir_frame"  frameborder="0">

然后再次调用 DownloadString,但现在在 src 属性中使用 url:

此代码对字符串 IndexOf 进行快速破解以找到该属性。

 using(WebClient downloadClient = new WebClient())
 {
    Uri url = new Uri("http://theblademasterrpg.com/Patcher/data/p.dat");
    var html= downloadClient.DownloadString(url);
    // parse to the frame src
    var search = "<frame src=\"";
    var pos = html.IndexOf(search);
    // find the end quote
    var lastQuote = html.IndexOf("\"", pos+ search.Length);
    // download that src
    var frameUrl = html.Substring(pos+ search.Length, lastQuote- (pos + search.Length));
    var real = downloadClient.DownloadString(frameUrl);
    // real has now the content of that file
    real.Dump(); // LinQPad
 }

请注意,网站更改了它们的 html 标记,您需要相应地调整此代码。