从网站解析返回403禁止

时间:2013-12-14 08:17:37

标签: c# parsing xaml windows-8 store

实际上,我正在编写一个Windows商店应用程序,我尝试解析一个网站,但响应返回它在请求中有错误是不需要的。 我有一个快照,可能有助于我们找到解决方案 这段代码适用于我尝试的所有网站,但是没有用。

我使用这个源代码:

private async void parsingActualites()
    {
        HttpClient http = new System.Net.Http.HttpClient();
        HttpClientHandler newClientHandler = new HttpClientHandler();
        System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
        ***var reponse = await http.GetByteArrayAsync("http://.........../");***
        str3 = Encoding.UTF8.GetString(reponse, 0, reponse.Length - 1);
        var strdecodet = System.Net.WebUtility.HtmlDecode(str3);
        HtmlAgilityPack.HtmlDocument document2 = new HtmlAgilityPack.HtmlDocument();
        document2.LoadHtml(str3);

向我显示的错误是:

  

响应状态代码不表示成功:403(禁止)。

RES

这是描述更多错误的图片,请你帮助我:)。

2 个答案:

答案 0 :(得分:6)

有些网络服务器希望在请求中收到User-Agent标头(如果他们看不到,则返回403)。您可以添加User-Agent标头,例如:

HttpClient httpClient = new HttpClient();
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get,"http://example.com");
// Add our custom headers
requestMessage.Headers.Add("User-Agent", "User-Agent-Here");
HttpResponseMessage response = await httpClient.SendAsync(requestMessage);

答案 1 :(得分:5)

您遇到的情况可能有多种原因。例如 - 该站点可能需要您的程序不执行的身份验证,但您在浏览时手动执行。或者网站期待您的程序不提供的标题。

解决此问题的正确方法是了解浏览器的功能,而不是。下载Fiddler,运行它,然后浏览到网址。 Fiddler将显示您的浏览器发出的实际请求。这是一个例子 - Fiddler example

正如您所看到的,浏览器会发送更多标题,您应该这样做(实际上您应该找到有效的最小集合)。要添加标题,请查看http://massivescale.com/pages/custom-headers-with-httpclient/How do you set the Content-Type header for an HttpClient request?