2013-12-14 108 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);