为什么在编辑html文件时下载html并将其保存为硬盘上的文件,我在里面看到:[Access Denied#2]?

时间:2014-02-26 23:07:20

标签: c# html winforms

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;

namespace Battlefield_Servers_Ping
{
    public partial class Form1 : Form
    {
        private string appDirectory;
        private string htmlFilesDirectory;
        private string localFilename;
        private string mainurl;
        private string[] serversip;

        public Form1()
        {
            InitializeComponent();

            appDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath);
            htmlFilesDirectory = "HtmlFilesDirectory";
            htmlFilesDirectory = Path.Combine(appDirectory, htmlFilesDirectory);

            Directory.CreateDirectory(htmlFilesDirectory + "\\Tests");
            mainurl = "http://www.game-monitor.com/search.php?game=bfbc2&&num=";
            using (WebClient client = new WebClient())
            {
                for (int i = 10; i <= 100; i += 10)
                {
                    client.DownloadFile(mainurl + i, htmlFilesDirectory + "\\Tests\\" + i + ".html");
                }
            }

        }
    }
}

最后我在硬盘上有10个html文件,每个文件都是1kb,里面我看到了:

[拒绝访问#2]

将它们所在的文件保存在我想要的目录中并不是问题。该网站可能存在问题吗?

变量htmlFilesDirectory是:

C:\\Users\\bout0_000\\AppData\\Local\\Tests\\Tests\\HtmlFilesDirectory

网页来源是:

http://www.game-monitor.com/search.php?game=bfbc2&&num=10

如果我在这个空白地方的broswer chrome中进行保存,因为我可以保存html文件没有问题。并在以后编辑它。 当我做保存作为文件的名称是:

Battlefield Bad Company 2 Servers   Server   Player Search   Game-Monitor.com    Server Search, Monitoring, Stats and more

但是在我的程序中我将它保存为diffrenet。地址不同。

2 个答案:

答案 0 :(得分:0)

啊,我明白了。您无法从其他域保存此类文件。

您需要做的是将HTML请求流并将其保存到文件中。

尝试使用WebRequest: http://msdn.microsoft.com/en-us/library/system.net.webrequest(v=vs.110).aspx

答案 1 :(得分:0)

似乎该网站阻止了除浏览器之外的请求。要确认,您可以尝试使用DownloadString方法,该方法会将网页内容作为字符串返回:

var result = client.DownloadString(mainurl + i);

在那里放置断点,你会看到"[ Access Denied #2 ]"而不是浏览器中看到的html内容。

此限制没有即时解决方法。您可能想尝试关注此帖:

How can I emulate a web browser http request from code?

模拟从您的网络浏览器发送到网站的请求。