2010-11-16 140 views
2

我想使用httpWebRequest來獲得一個完整的網頁,但我得到的響應不是一個完整的網頁,因爲部分網頁由AJAX加載,這部分需要一會兒(通常加載10-30秒)。有沒有一種方法可以設置/強制httpWebRequest在檢索網頁內容之前等待幾秒鐘?HTTPWebRequest等待內容加載通過Ajax

任何幫助將不勝感激!

感謝

+1

你將不得不爲此使用WebBrowser控件。沒有我知道的類對Javascript有任何支持。 – leppie 2010-12-06 11:37:24

回答

0

下面是我的代碼

HttpWebRequest httpWebRequest = null; 
HttpWebResponse httpWebResponse = null; 
Stream webResponseStream; 
StreamReader streamReader; 
string html = ""; 

try 
{ 
    UTF8Encoding encoding = new UTF8Encoding(); 
    byte[] data = encoding.GetBytes(postData); 
    httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"; 
    httpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 

    httpWebRequest.KeepAlive = false; 
    httpWebRequest.Method = WebRequestMethods.Http.Post; 

    httpWebRequest.AllowAutoRedirect = true; 
    httpWebRequest.Headers.Add("Accept-Language", "en-us"); 
    httpWebRequest.ContentLength = data.Length; 


    Stream dataStream = httpWebRequest.GetRequestStream(); 
    dataStream.Write(data, 0, data.Length); 
    dataStream.Close(); 

    httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 

    webResponseStream = httpWebResponse.GetResponseStream(); 

    // Reading the webResponseStream with streamReader object and assigning into one string 
    streamReader = new StreamReader(webResponseStream); 

    html = streamReader.ReadToEnd(); 

} 
catch{ 

} 

return html; 
-1

爲什麼不能與某些thign簡單這樣去:

WebClient w = new WebClient(); 
string pageSource = w.DownloadString(URL); 

試試這個,如果它工作再加入所有其餘的你屬性到WebClient對象

+0

感謝您的快速響應。 WebClient的工作方式與HttpRequest相同。我仍然無法獲得完整的網頁。有沒有辦法讓Web Client等待從遠程網站下載數據20秒之前等待? – 2010-11-16 22:53:32

1

如果網站使用AJAX加載數據,則使用HttpW ebRequest可能無法正常工作。原因是該網站可能使用document.onLoad()或page.onLoad()方法向遠程站點發出GET請求。這發生在瀏覽器的JavaScript執行內部。

如果你想讓這個工作,你有兩個選擇。

1)發出對容器頁面(您訪問的主頁面)的請求,並對容器頁面使用AJAX加載的包含頁面發出第二個請求。爲了找到包含的頁面,您必須使用Firefox和Firebug插件來找出內部頁面的URL。

2)使用一些支持Javascript和HTML/DOM的高級框架。例如,您可以嘗試使用.NET中託管的Microsoft WebBrowser控件。或者您可以使用其他框架,只要框架支持JavaScript並理解HTML。