none
用 HttpWebRequest 連接 httpS 出現怪符號 RRS feed

  • 問題

  • 當我連接 facebook 的 login 頁面時, 出現一堆怪符號, 請問何解??

    ----------------------------------------------

    _�_\>w�����������̟�~s{��ͥ�7�I^�R����p�����O/�o�m���ͅ�oW��Y�Uw���׾�����'�U��_zt���Q��;��oy�"DZ��kW�U�^]�Hq������_}�Ƶ��W�7?[zpy���;�.b�����û�O.-�xe�/���U�^�>��Ϯ���[��M஽���� �v����ח?��G�y�M�'�hQ�b�CD�Dr�����+-' E�%~�p�t29==��2���ϓ���F:�7U_�-���@{�O��h����Y8��;��Q�^a$�dC�N�S1!�q������S� ��8kI��#;���'W�fٖB"9՘�t%���i���&G[ 2(�a�e�m)�z;����s�+��@{�8i�j>U���h9�\��|���ᣢ��=��#��cC�C�����q��έ1v�6��0͐s���W"g�$�h u�G�������MdK����#���* CO&��lȌ�4S�~�$U��CM##S��Gw�

    ----------------------------------------------------

     request and response

    ---------------------------

    Response Header: Pragma: no-cache
    X-UA-Compatible: IE=edge
    X-XSS-Protection: 0
    X-FB-Server: 10.32.155.129
    Connection: close
    Content-Encoding: gzip
    Content-Length: 25057
    Cache-Control: private, no-cache, no-store, must-revalidate
    Content-Type: text/html; charset=utf-8
    Expires: Sat, 01 Jan 2000 00:00:00 GMT
    P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
    Set-Cookie: lsd=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com; httponly

    Request Header: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Foxy/1; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1; yie8)
    Accept-Encoding: gzip,deflate
    Accept-Language: zh-hk
    Accept: *.*
    Content-Type: application/x-www-form-urlencoded; charset=utf-8
    Host: www.facebook.com
    Cookie: datr=Vk6dfTpnfsJqIz-0G7eQXgdsD0; c_user=102253235238634; fl=1; L=2; lsd=e7LPC; lu=ggK65HwfsdhhrrrwreZE8-kUX4Q; sct=1319128665; W=131sdf28665; xs=4%3A8478sfceacaefsfrt7f29a4ae5894
    Connection: Keep-Alive

    -----------------------------------------------------

     

     

    我已加了認證

    myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";

                    if (url.StartsWith("https"))
                    {
                        myHttpWebRequest.Credentials = creds;
                        myHttpWebRequest.PreAuthenticate = true;
                        myHttpWebRequest.ProtocolVersion = HttpVersion.Version10;               
                   
                    }  

    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true;     
        } 

     

    己有 cert. 也有 Credentials, 到底出了什麼問題?

    雖然我知 facebook 應該有 API, 但我想用 httpWebRequest + Credentials 去通過 facebook 等用 https 作傳輸的網站。



    • 已編輯 asp.coder 2011年10月20日 下午 04:40
    2011年10月20日 下午 03:47

解答

  • 看 Head的資料來判斷(Content-Encoding: gzip) , 他有用到 HTTP Compression, 所以在WebHttpResponse接回來的資料要解壓縮

    用這樣的方式試試看

        HttpWebResponse WebResponse = (HttpWebResponse)Http.GetResponse();

        Stream responseStream = responseStream = WebResponse.GetResponseStream();
        if (WebResponse.ContentEncoding.ToLower().Contains("gzip"))
            responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
        else if (WebResponse.ContentEncoding.ToLower().Contains("deflate"))
            responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);           

        StreamReader Reader = new StreamReader(responseStream, Encoding.Default);

        string Html = Reader.ReadToEnd();

    另請參考 [GZipStream 類別]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年10月21日 上午 02:42
    版主

所有回覆

  • facebook 的簽證是由公正中間者DigiCert Inc製作的。

    http://support.microsoft.com/kb/915599/zh-tw(常考看)

    webrequest facebook ssl c#(在google下找這keyword)

     

    希望幫到你!

    2011年10月20日 下午 05:04
  • 而你所謂的怪

    符號

    就是應該沒採用unicode統一編碼吧~

    http://msdn.microsoft.com/zh-tw/library/zs0350fy%28v=vs.80%29.aspx

    看看這裡!

    2011年10月20日 下午 05:10
  • 看 Head的資料來判斷(Content-Encoding: gzip) , 他有用到 HTTP Compression, 所以在WebHttpResponse接回來的資料要解壓縮

    用這樣的方式試試看

        HttpWebResponse WebResponse = (HttpWebResponse)Http.GetResponse();

        Stream responseStream = responseStream = WebResponse.GetResponseStream();
        if (WebResponse.ContentEncoding.ToLower().Contains("gzip"))
            responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
        else if (WebResponse.ContentEncoding.ToLower().Contains("deflate"))
            responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);           

        StreamReader Reader = new StreamReader(responseStream, Encoding.Default);

        string Html = Reader.ReadToEnd();

    另請參考 [GZipStream 類別]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年10月21日 上午 02:42
    版主
  • Chung 大師, 你是得的啊!!

    謝謝!!!

    2011年10月21日 上午 10:09
  • 一開始給你連結時,就跟你說第一篇就要仔細看:

    [VB 2008.NET] 載入HTML碼時的問題 (不是分析代碼)

    裡面有:

    Accept-Encoding: gzip, deflate

    表示瀏覽器可以讀那些壓縮格式。我同常自己寫程式會加這個,讓網站跟我的 client 用 gzip 傳輸。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月21日 下午 12:51