2014-12-07 89 views
-1

我使用HtmlAgilityPack從網站獲取HTML,並且來自該網站的請求是由XMLHttpRequest和HTML加載在DIV中我無法獲得該HTML加載的外部請求我試過,但我無法得到htmlC#HtmlAgilityPack Html加載外部

   HttpWebRequest getRequest = WebRequest.Create(Url) as HttpWebRequest; 
      // 
      getRequest.CookieContainer = cookieJar; 
      getRequest.Method = WebRequestMethods.Http.Post; 
      getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0"; 
      getRequest.AllowWriteStreamBuffering = true; 
      getRequest.ProtocolVersion = HttpVersion.Version11; 
      getRequest.AllowAutoRedirect = true; 
      getRequest.ContentType = "application/x-www-form-urlencoded"; 

      Stream newStream1 = getRequest.GetRequestStream(); 
      newStream1.Close(); 
      HttpWebResponse getRequestResponse = (HttpWebResponse)getRequest.GetResponse(); 
      string source = ""; 

      using (StreamReader sr = new StreamReader(getRequestResponse.GetResponseStream(), Encoding.Default)) 
      { 
       source = sr.ReadToEnd(); 
       //Console.WriteLine(source); 
      } 
      doc.LoadHtml(source); 
      getRequestResponse.Close(); 
+0

究竟是什麼不工作? - 您是否期望它在給定頁面上執行JavaScript/AJAX請求?因爲'HtmlAgilityPack'沒有這樣做,它不是一個網頁瀏覽器,它只是解析你把它給DOM的HTML。 - 如果你想做屏幕抓取,我建議用'Selenium'來查看網絡瀏覽器自動化(它應該在Nuget上)。 - 嘗試使用Firefox或Chrome開始/調試,但是您應該能夠移動到PhantomJS無頭瀏覽器,以避免顯示UI /提高性能。 – BrainSlugs83 2016-10-12 22:56:12

回答

-1

我會建議更新您的代碼以使用HttpClient類。這支持異步行爲,可以幫助您的應用程序的可伸縮性(在某些情況下)。

MSDN HttpClient Docs

然而,看着目前的實現中,如果您收到一個405錯誤也可能是因爲你試圖張貼到URL。由於我在代碼片段中看不到任何POST數據,因此使用GET請求可能會更好:

getRequest.Method = WebRequestMethods.Http.Get;