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

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

/// 
/// 通过post与server进行通信
/// 
/// 以xml格式封装的数据
/// 服务器地址
/// 数据以xml格式返回
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以安全著称,但是有时因为各种原因,需要跳过验证证书的合法性,这时候,就需要在代码中做出相应的修改。
添加如下函数:

/// 
/// 该函数的作用就是,不验证证书的合法性。
/// 
/// 
/// 
/// 
/// 
/// 
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;

你可能感兴趣的:(Winfrom)