c#代碼訪問https服務器以及https的webservice


代碼訪問https類似瀏覽器操作

1.驗證證書

2.如果要求客戶端證書,提供客戶端證書

 

具體代碼如下:

訪問https的web

 public static void ProcessRequest()
        {
            //類似瀏覽器確認證書合法方法的綁定
            ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCallback;
            
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://yourUrl");

            string param = "test=true";
            byte[] bs = Encoding.UTF8.GetBytes(param);

            //這2句代碼表示如果要求客戶端證書,將客戶端證書加入request,不需要客戶端證書的https請求則不需要此代碼
            X509Certificate cer = new X509Certificate("D:\\tt.cer");
            request.ClientCertificates.Add(cer);

            request.UserAgent = "test";
            request.Method = "post";

            using (Stream reqStram = request.GetRequestStream())
            {
                reqStram.Write(bs, 0, bs.Length);
            }

            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    Console.WriteLine(reader.ReadToEnd());
                }
            }
            
            Console.ReadKey();
        }
        //該方法用於驗證服務器證書是否合法,當然可以直接返回true來表示驗證永遠通過。服務器證書具體內容在參數certificate中。可根據個人需求驗證
        //該方法在request.GetResponse()時觸發
        public static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
            return false;
        }

訪問https的web service基本類同,首先添加對https的web引用。

在代碼中:

        public static void WebRefrence()
        {
            //如果覺得寫一個委托方法麻煩,可以直接使用匿名委托
            ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, 
                X509Chain chain, SslPolicyErrors errors)
            {
                if (errors == SslPolicyErrors.None)
                    return true;
                return false;
            };

            //創建web引用的實例
            WebReference.Service ws = new WebReference.Service();

            //提供客戶端證書,不要求的可以忽略該步驟
            ws.ClientCertificates.Add(new X509Certificate("D:\\tt.cer"));
            //執行web service中提供的方法,該例中為將傳入的2個int相加並返回結果
            int r = ws.Add(4, 5);
            Console.WriteLine(r);
            Console.ReadKey();
        }

對於https服務器和webservice的創建請參見其他文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM