none
HTTPS連線逾時 RRS feed

  • 問題

  • 想請問一下關於https連線的問題~

    程式非常簡單,只有以下幾行:

    string url = "https://xxxxx.tw/api/QRPay/";
    
    WebClient wc = new WebClient();
    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    string s = wc.DownloadString(url);

    執行的時候沒有出現任何錯誤,就只是逾時而已;可是我同樣的程式連其它的https站台(ex google)都不會有這個狀況,只有連這個網址會。

    神奇的是如果開著fiddler再執行程式就會順利回應,所以我猜測可能是因為憑證或是其它要求導致我連線他沒有回應。

    從封包看的話透過fiddler執行會多了一些:

    TLS Rec Layer-1 HandShake: Client Key Exchange.; TLS Rec Layer-2 Cipher Change Spec; TLS Rec Layer-3 HandShake: Encrypted Handshake Message

    TLS Rec Layer-1 Cipher Change Spec; TLS Rec Layer-2 HandShake: Encrypted Handshake Message

    TLS Rec Layer-1 SSL Application Data

    不知道是需要調整哪裡才可以順利連結? 謝謝回覆 @@

    PS:因為測半天只有這個網址會,所以網址在結問題之後會拿掉。


    2013年7月18日 上午 11:32

解答

  • 我剛測試了一下 發現 用 .net 3.5 以前 必需限定SecurityProtocol 只使用 SSL3  才不會發生time out exception

    但若是  2010 + .net 4.0 client profile 在不指定SecurityProtocol 的情況下 並不會發生time out exception

    推測 CLR 在這地方有作了改變


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 Shelly Chen 2013年7月20日 上午 08:19
    2013年7月19日 下午 05:48

所有回覆

  • 我直接開Chrome 沒有問題

    用IE8開則會出現 無法下載QRPay 的錯誤

    用VS 2010 寫了一個win form 

    可以收到字串 不會有問題 只是RCodeMessage 因為 編碼問題 看不出來是什麼字 


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2013年7月19日 上午 05:52
  • ie因為不會直接把json的內容打開,所以會直接出現下載視窗。chrome則不會~

    我也有先用瀏覽器試過,也是有正常回應。

    不知道你的測試程式是用HttpWebRequest 還是 WebClient連@@?

    另外執行大概多久會有回應呢?

    2013年7月19日 上午 06:22
  • Hi,

    您可用fiddler檢查一下,是不是header要多給一些資訊呢?

    http://www.dotblogs.com.tw/rainmaker/archive/2013/05/17/104436.aspx

    我使用Fiddler加入以下的header,就會回傳成功

    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4

    =>

    SystemID=&POSID=&OrderID=&TAC=&PmtOrderID=&ResponseDate=20130719143143&RCode=0000&RCodeMsg=成功

    我用您的測試程式,加入Header & Encoding,可正常回傳字串,

    using (WebClient wc = new WebClient())
                {
                    string url = "https://apis_test.lifeplus.tw/api/QRPay/";
                    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                    wc.Headers["User-Agent"] = "Mozilla/4.0";
                    wc.Encoding = Encoding.UTF8;
                    var s = wc.DownloadString(url);
                }
    如果沒加字串,也很快就回傳,不會有timout的問題說!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/



    • 已編輯 亂馬客 2013年7月19日 上午 06:41 加入code
    2013年7月19日 上午 06:29
  • 程式的部份是使用 WebClient

    時間的話是 不到一秒

     

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2013年7月19日 上午 10:28
  • 我直接拿亂碼客改的來試(console)...一樣會timeout。

    os是win7,dev是vs2012 .net 2.0,然後是用console測的。

    我有試過用fiddler post,header除了user-agent預設的fiddler以外什麼都不要加也會過。

    可是就是從程式不行@@

    下午找到一個設定參數,這個設了就可以了:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

    看起來你們好像也沒設這個,為什麼我的程式就是會timeout @@


    2013年7月19日 下午 02:58
  • 我剛測試了一下 發現 用 .net 3.5 以前 必需限定SecurityProtocol 只使用 SSL3  才不會發生time out exception

    但若是  2010 + .net 4.0 client profile 在不指定SecurityProtocol 的情況下 並不會發生time out exception

    推測 CLR 在這地方有作了改變


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 Shelly Chen 2013年7月20日 上午 08:19
    2013年7月19日 下午 05:48
  • 沒錯~我試了也是。

    4.0以上就不會有這個問題,3.5以下,一定要指定使用SSL3,而且還不能和TLS共用

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

    這種用法也會timeout。

    非常謝謝~

    2013年7月20日 上午 08:20