2013-12-14 107 views
0

实际上,我正在编程一个Windows应用商店,我尝试解析一个网站,但响应返回它在请求中有错误是不需要的。 我有一个快照,也许可以帮助我们找到解决方案 此代码与我尝试过的所有网站一起工作,但没有工作。从网站解析返回403禁止

我用这个源代码:

响应状态代码表明没有成功:403(禁止)

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); 

这表明我是错误。

RES

这是一个图片来描述更多的错误,请你能帮助我:)

+0

你可以浏览到与访问URL? – Vadim

+0

是的,我可以,它工作100% –

回答

4

可能有几个原因,你正在经历。例如 - 该网站可能需要您的程序无法执行的身份验证,但您在浏览时手动进行了身份验证。或者网站期待您的程序不提供的标题。

解决此问题的正确方法是了解浏览器的功能,而不是。下载Fiddler,运行它,然后浏览到该网址。 Fiddler将显示您的浏览器提出的实际请求。这是一个例子 - Fiddler example。正如你所看到的,浏览器发送了更多的头文件,你应该这样做(实际上你应该找到最小的工作集)。要添加标题 - 看看http://massivescale.com/pages/custom-headers-with-httpclient/How do you set the Content-Type header for an HttpClient request?

+0

相同的问题,使用用户代理不是一个解决方案!同样的消息403被禁止 –

+0

@MedMans - 1.您是否添加了浏览器发送的所有标题? 2.该网站是否需要认证? 3.你可以在浏览网站时发布fiddler的屏幕截图(你可以检查除标题以外的所有内容)和你的代码吗? – Vadim

+0

我验证了我的代码,现在问题解决了,我只是改变了put方法来获取方法,非常感谢你! (y)的 –

5

有期望接收的请求User-Agent头某些Web服务器(和它们返回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);