winform通过https与服务器进行通信

来源:互联网 发布:阿里云ces加内存 编辑:程序博客网 时间:2024/05/16 15:27

C#做客户端(winfrom)是非常方便的。
当winfrom通过https与服务器进行通信时,可以选择json,xml等数据结构封装要传输的数据。
下面是以xml封装数据,以https与server进行通信的函数:

/// <summary>/// 通过post与server进行通信/// </summary>/// <param name="xml">以xml格式封装的数据</param>/// <param name="url">服务器地址</param>/// <returns>数据以xml格式返回</returns>public string post(string xml, string url){    string xmlStr = null;    try    {        byte[] bs = Encoding.UTF8.GetBytes(xml);//以字节数组读入数据        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);//这里写服务器地址        req.Method = "POST";//与服务器通信格式        //req.ContentType = "application/x-www-form-urlencoded";        req.ContentType = "application/xml";//设置client与server通信的数据结构        req.ContentLength = bs.Length;        //req.ReadWriteTimeout();        Stream reqStream = req.GetRequestStream();//获取服务端的返回值        reqStream.Write(bs, 0, bs.Length);        WebResponse result = req.GetResponse();        Stream ReceiveStream = result.GetResponseStream();        StreamReader sr = new StreamReader(ReceiveStream);        xmlStr = sr.ReadToEnd();//服务端返回的数据值,根据你们的协议,你可以去解析收到的数据    }    catch (Exception ex)    {        LogHelper.WriteLog(typeof(Form1), ex);//记录错误日志    }    return xmlStr;}

https以安全著称,但是有时因为各种原因,需要跳过验证证书的合法性,这时候,就需要在代码中做出相应的修改。
添加如下函数:

/// <summary>/// 该函数的作用就是,不验证证书的合法性。/// </summary>/// <param name="sender"></param>/// <param name="cert"></param>/// <param name="chain"></param>/// <param name="error"></param>/// <returns></returns>private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error){    // trust any certificate!!!    System.Console.WriteLine("Warning, trust any certificate");    //为了通过证书验证,总是返回true    return true;}

之后,在post函数中添加如下语句:

//验证服务器证书回调自动验证ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
0 0
原创粉丝点击