/// <summary> /// 返回JSon数据 /// </summary> /// <param name="json">要处理的JSON数据</param> /// <param name="url">要提交的URL</param> /// <param name="authorCode">认证字符串</param> /// <returns>返回的JSON处理字符串</returns> public static string GetResponseData(string json, string url, string authorCode, string API_Token1) { HttpWebRequest request = null; try { ServicePointManager.Expect100Continue = false; byte[] bytes = Encoding.UTF8.GetBytes(json); //初始化新的webRequst //1. 创建httpWebRequest对象 //request = (HttpWebRequest)WebRequest.Create(url); if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version11; } else { request = WebRequest.Create(url) as HttpWebRequest; } //POST /k/v1/records.json HTTP/1.1 //2.初始化HttpWebRequest对象 request.Method = "POST";//Post或者get request.ContentType = "application/json; charset=UTF-8"; request.ContentLength = bytes.Length; request.KeepAlive = false; request.AllowAutoRedirect = false; request.Timeout = 30000; request.ReadWriteTimeout = 30000; request.Proxy = null; //安全认证 request.Headers.Add("Authorization", "Basic " + authorCode); request.Headers.Add("X-Cybozu-API-Token", API_Token1); //request.ProtocolVersion = HttpVersion.Version11; //ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;//SecurityProtocolType.Tls1.2; //ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //request.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; //3.附加要POST给服务器的数据到HttpWebRequest对象(附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。) //request.CookieContainer = cookieContainer; using (Stream stream = request.GetRequestStream()) { stream.Write(bytes, 0, bytes.Length); } //4. 读取服务器的返回信息 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); return reader.ReadToEnd(); } catch (Exception ex) { throw ex; } finally { request.ServicePoint.ConnectionLimit = 50; request.AllowAutoRedirect = false; ///必须释放掉,不然同一个接口只能调用一次 request.Abort(); } }
注意https和http的区别
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version11; } else { request = WebRequest.Create(url) as HttpWebRequest; }
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }