none
讀取 https 網站 RRS feed

  • 問題

  • 請教大家一個問題
    我再讀取 https://www.certiport.com/portal/Pages/Registration.aspx
    我換了許多種寫法, 總是會遇到"已經嘗試太多次自動重新導向"的 WebException


    http://img.waffleimages.com/9c7e3918d649e021c11d6be1dacd54685c8d1065/1.png
    http://img.waffleimages.com/3fc1cabd30706c7e714b50b8f65fb5f6cf52ee88/2.png

    我看 Exception 里的的訊息
    看到其實他有把 http 的指令都有出來
    而且收到了 set-Cookie 的指令, 請問是哪裡出錯?
    不知道大家可以讀取跟發指令出去嗎?


    以下是我的四種寫法
    寫法一
    WebClient client = new WebClient();
    client.Headers["User-Agent"] = "Googlebot/2.1 (+http://www.googlebot.com/bot.html)";
    client.Headers["Accept-Encoding"] = "gzip";
    string value = client.DownloadString("https://www.certiport.com/portal/Pages/Registration.aspx");
    textBox1.Text += value;
    



    寫法二
    WebClient client = new WebClient();
    // Download data.
    byte[] arr = client.DownloadData("https://www.certiport.com/portal/Pages/Registration.aspx");
    string contentEncoding = client.ResponseHeaders["Content-Encoding"];
    textBox1.Text = arr.Length.ToString();
    
    


    寫法三
    string url = "https://www.certiport.com/portal/Pages/Registration.aspx";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());
    string Line;
    while ((Line = reader.ReadLine()) != null)
    {
        Label1.Text += Line;
    }
    



    寫法四
    string url = "https://www.certiport.com/portal/Pages/Registration.aspx";
    WebClient wc = new WebClient();
    wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5");
    wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    wc.Headers.Add("Accept-Encoding", "gzip,deflate") ;
    wc.Headers.Add("Keep-Alive", "300");
    
    wc.Headers.Add("Referer", "https://www.certiport.com/");
    
    Stream s = wc.OpenRead(url);
    StreamReader sr = new StreamReader(s, Encoding.UTF8);
    string content = sr.ReadToEnd();
    

    2009年11月23日 上午 03:13

解答

  • 這邊我有看過, 不過還是修不好
    還是沒有解決我的問題 :(
    不過還是謝謝你的回答!

    你可以朝心冷大的方向去嘗試

    我自己剛測試了一下(timer1.Interval = 3000;)
    HttpWebRequest+CookieContainer就可以抓到該網站HTML
    也不會有已經嘗試太多次自動重新導向的錯誤訊息
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 Lolota Lee 2009年11月30日 上午 06:20
    2009年11月23日 上午 11:48

所有回覆

  • hi
    可以參考這篇討論
    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/9da07a71-f5c4-4427-9b81-c6ddc13c4f1b
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年11月23日 上午 03:37
  • 這邊我有看過, 不過還是修不好
    還是沒有解決我的問題 :(
    不過還是謝謝你的回答!
    2009年11月23日 上午 03:43
  • 掛個封包監聽器看看用網頁連跟 WebClient 的差異。

    說個我碰過的例子流程:
    1. 連線 -> 2. 伺服器檢查有無對應 Cookies -> 3. 沒有導向登入頁同時輸出檢查的 Cookies -> 4. 登入葉檢查有無 Cookies ,沒有重新導向 3

    用網頁連的時候,因為 IE 會在 4 的時候把 Cookies 代入,所以沒問題。
    但是 WebClient 在 4 的時候並沒有 Cookies ,因為這時仍然是自動導向,然後就 3, 4 猛跳,就踢出來了。

    這種網站不能用 WebClient ,因為 WebClient 要送 Cookies 進去時,不能有這種 3, 4 互相檢查的。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月23日 上午 08:10
  • 這邊我有看過, 不過還是修不好
    還是沒有解決我的問題 :(
    不過還是謝謝你的回答!

    你可以朝心冷大的方向去嘗試

    我自己剛測試了一下(timer1.Interval = 3000;)
    HttpWebRequest+CookieContainer就可以抓到該網站HTML
    也不會有已經嘗試太多次自動重新導向的錯誤訊息
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 Lolota Lee 2009年11月30日 上午 06:20
    2009年11月23日 上午 11:48
  • 感謝大家的回覆!
    我取到值了, 關鍵是: cookieContainer
    我之前有抓封包來分析用 HttpFox 分析的時候
    再一次 GET 有抓到他設定 set-Cookie: xxx
    但是 ASPNETSESSION 沒寫進來, 我覺得怪怪的
    後來我用我之前自己寫的瀏覽器去瀏覽, 將 Cookie 清空(我自己寫的我給了一個欄位可以隨時自定cookie), 我發現不會重新導向
    我現在想通了, 他不會重新導向是因為他有 Cookie 但是是空的
    但是 NET 再溝通的時候根本沒有 Cookie 所以一直重新連線
    不知道這樣的結論對嗎?
    2009年11月23日 下午 05:34
  • 你得針對網站自行處理相關機制,而有些網站就不須設定cookie也能request ok

    由於request該網站時需要設定cookies,所以只要使用cookieContainer來存放該網站的cookie
    並送出(myrequest.CookieContainer=cc)就不會重複request網站進而導致出現
    已經嘗試太多次自動重新導向的錯誤訊息


    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年11月23日 下午 11:25
  • WebClient 這個類別可以處理自動重新導向,請注意封包監聽的內容

    但是在自動重新導向的過程中,WebClient 不能掛入 Cookies ,這就造成無法以有 Cookies 的狀態讀取重新導向的網頁。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月24日 上午 12:09
  • 大大,可否請您分享如何自訂cookieContainer呢?

    一定要透到webservice才能使用嗎?

    因為我現在也遇到重新導向的問題,想參考您的做法,

    麻煩您囉,謝謝喔~~

    2012年3月16日 上午 04:19
  • 這裡有一個參考網址,你可以看一下。

    如何: 使用 CookieContainer 來維護 Web 服務中的狀態,當您使用 Visual C#.NET


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    MVP for VB.NET since 2003

    2012年3月16日 上午 04:34
  • phpBB 這類是透過 html / script 重新導向,可以使用 WebClient

    Server 端直接輸出重新導向,就必須用 httpRequest / httpResponse 去處理,收完後,掛入 cookies 再用程式碼去連新網址


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年3月16日 下午 03:12