2011-06-10 71 views
3

我想解析頁面的HTML代碼在http://odds.bestbetting.com/horse-racing/today爲了有一個比賽列表等 問題是我無法檢索HTML代碼這一頁。下面是函數的C#代碼:無法通過HttpWebRequest獲取HTML代碼

public static string Http(string url) {   
      Uri myUri = new Uri(url); 
      // Create a 'HttpWebRequest' object for the specified url. 
      HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); 
      myHttpWebRequest.AllowAutoRedirect = true; 
      // Send the request and wait for response. 
      HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
      var stream = myHttpWebResponse.GetResponseStream(); 
      var reader = new StreamReader(stream); 
      var html = reader.ReadToEnd(); 
      // Release resources of response object. 
      myHttpWebResponse.Close(); 

      return html; 
    } 

當我執行程序調用該函數,它拋出上

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse()異常;

是:

無法處理來自HTTP/HTTPS協議,以其他不同的人重定向。

我已閱讀this question但我似乎沒有相同的問題。 我也嘗試用f f提琴嗅探流量,但不能看到任何它重定向或類似的地方。我只是提取了這兩種可能的重定向:odds.bestbetting.com/horse-racing/2011-06-10/by課程 和odds.bestbetting.com/horse-racing/2011-06-10/byTime,但查詢它們會產生與上面相同的結果。

這不是我第一次做這樣的事情,但我真的失去了這一點。任何幫助?

謝謝!

回答

1

可能有一打可能導致您的問題的原因。

其中之一是來自服務器的重定向指向一個FTP站點,或類似的東西。

也可能是服務器在請求中需要一些標題,而您沒有提供。

檢查瀏覽器將發送到網站並嘗試複製。

+0

你好。我試圖複製瀏覽器在代碼中發送的頭文件,但結果是一樣的。 我也設置請求的AllowAutoRedirect屬性爲false,以嘗試手動處理重定向,但是我作爲響應得到的標記是這個,導致無處可尋:http://pastebin.com/nG170xnd 我真的很困惑這件事......任何其他的想法?謝謝! – 2011-06-10 13:16:28

+0

對不起,我不能給你任何票,因爲我沒有足夠的聲望,但非常感謝你的幫助。我終於找到了解決這個問題的方法。我會在時間限制允許的情況下發布。 – 2011-06-10 13:45:15

3

我終於找到了解決方案......它實際上是頭問題,特別是User-Agent問題。

我發現很多搜索與我有同樣問題的人在同一個網站。雖然他的代碼不同,但重要的是他將請求的UserAgent屬性手動設置爲瀏覽器的UserAgent屬性。我想我以前做過這件事,但我可能做得很糟糕......對不起。

如果是感興趣的任何一個最後的代碼是這樣的:

public static string Http(string url) { 
     if (url.Length > 0) 
     { 
      Uri myUri = new Uri(url); 
      // Create a 'HttpWebRequest' object for the specified url. 
      HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); 
      // Set the user agent as if we were a web browser 
      myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"; 

      HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
      var stream = myHttpWebResponse.GetResponseStream(); 
      var reader = new StreamReader(stream); 
      var html = reader.ReadToEnd(); 
      // Release resources of response object. 
      myHttpWebResponse.Close(); 

      return html; 
     } 
     else { return "NO URL"; } 
    } 

非常感謝你的幫助。